5

を含むファイルがあります

apple
apple
banana
orange
apple
orange

重複するappleとorangeを見つけて、appleとorangeが繰り返されていることをユーザーに伝えるスクリプトが必要です。私は試した

nawk '!x[$1]++' FS="," filename

繰り返されるアイテムを見つけるにはどうすればunix bashでそれらを印刷できますか?

4

3 に答える 3

1

アップデート:

質問が大幅に変更されました。以前は、これに答えると、入力ファイルは次のようになります。

apple apple banana orange apple orange
banana orange apple
...

ただし、解決策はとにかく機能しますが、この特別な使用例には少し複雑すぎるかもしれません.


次の awk スクリプトがその役割を果たします。

awk '{i=1;while(i <= NF){a[$(i++)]++}}END{for(i in a){if(a[i]>1){print i,a[i]}}}' your.file

出力:

apple 3
orange 2

次のような形でより理解しやすくなります。

#!/usr/bin/awk

{
  i=1;
  # iterate through every field
  while(i <= NF) {
    a[$(i++)]++; # count occurrences of every field
  }
}

# after all input lines have been read ...
END {
  for(i in a) {
    # ... print those fields which occurred more than 1 time
    if(a[i] > 1) {
      print i,a[i];
    }
  }
}

次に、ファイルを実行可能にし、入力ファイル名を渡して実行します。

chmod +x script.awk
./script.awk your.file  
于 2013-07-29T06:50:57.190 に答える