-1

私はawkを使用しており、任意の数のテキストファイル(引数)をスクリプトに送信し、入力ファイルごとに「何かを印刷」したいと考えています。

ここでスクリプトを見つけました

そして、スクリプトをこれに変更しました

awk -v nfiles="10" 'NR==FNR{a[$0]++;next}
$0 in a {a[$0]++; next}
{b[$0]++}
END{
  for(i in a){
    if(a[i]==nfiles) {
      print i > "output1"
    }
    else if(a[i]==1) {
        print i > "output3"
    }
  }
  for(i in b){
    if(b[i]==nfiles-1) {
        print i > "output2"
    }
  }
}' "$@"

nfiles="10"問題は、任意の数のテキスト引数であると想定されているため、何を書き込むかです。

また、このスクリプトはよくわかりません。このセクションのみを実行します

 else if(a[i]==1) {
        print i > "output3"
    }

そして、file1.txt からの情報のみを出力します。$3残りを実行しないのはなぜですか。また、すべてのファイルから行 3 ( ) のすべてを に出力したい場合はどうすればよいでしょうoutput3か? ありがとう =)

4

3 に答える 3

1

すべてのファイルの 3 番目の列 $3 を単一の出力ファイルに出力する場合は、次のようなものを使用できます。

awk '{ print $3 }' file1 [file2 .. filen] > output3

すべてのファイルの 3 行目を印刷する場合:

awk 'FNR == 3' file1 [file2 .. filen] > output3

もちろん、globを使用してファイルを一致させることができます。

awk '{ print $3 }' common_pattern* > output3
于 2011-06-30T16:51:31.573 に答える
0

渡す代わりに、nfiles=10これを最初のアクションとしてawkスクリプトに追加します。

FNR==1 {nfiles++}
于 2011-06-30T17:58:10.613 に答える