2

我需要获取一个文件并计算 $7 的出现次数——我已经用 awk 完成了这个(因为我需要通过更多的 awk 来运行它)

我想要做的是将它组合成一个脚本 - 到目前为止我有

#! /usr/bin/awk -f
# get the filename, count the number of occurs
# <no occurs> <filename>
{ print $7 | "grep /datasheets/ | sort | uniq -c"}

如何获取该输出并通过更多 awk 命令运行它 - 在同一个文件中

最终,我需要能够运行

./process.awk <filename> 

因此它可以替代以前的设置,这将花费太多时间/精力来改变 -

4

2 回答 2

3

如果要将 awk 脚本的输出转发到另一个 awk 脚本,只需将其通过管道传输到 awk。

awk 'foobar...' file|awk 'new awkcmd'

你的电流awk|grep|sort|uniq可以用 awk 本身来完成。保存您的 3 个过程。你想得到重复的计数,不是吗?

awk '$7~=/datasheets/{a[$7]++;} END{for(x in a)print x": "a[x]' file

应该管用。

于 2012-04-30T11:54:04.940 回答
1

如果您使用 Gawk,您可以使用 2 路通信将数据推送到外部命令,然后将其读回:

#!/usr/bin/gawk -f

BEGIN {
  COMMAND = "sort | uniq -c"
  SEEN = 0
  PROCINFO[ COMMAND, "pty" ] = 1
}

/datasheets/ {
  print $7 |& COMMAND
  SEEN = 1
}

END {
  # Don't read sort output if no input was provided
  if ( SEEN == 1 ) {

    # Tell sort no more input data is available
    close( COMMAND, "to" )

    # Read the sorted data
    while( ( COMMAND |& getline SORTED ) > 0 ) {
      # Do whatever you want on the sorted data
      print SORTED
    }
    close( COMMAND, "from" )
  }
}

https://www.gnu.org/software/gawk/manual/gawk.html#Two_002dway-I_002fO

于 2012-07-08T22:02:06.730 回答