2

ファイルを取得し、$7 の出現回数をカウントする必要があります - これは awk で行いました (これをさらに awk で実行する必要があるため)

私がやりたいことは、これを 1 つのスクリプトに結合することです。

#! /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 を使用する場合、双方向通信を使用してデータを外部コマンドにプッシュし、それを読み戻すことができます。

#!/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 に答える