ファイル内の重複項目を見つけて、最初の一致項目の行末に文字を追加したいと思います。

ファイル内の重複項目を見つけて、最初の一致項目の行末に文字を追加したいと思います。

ファイル内の重複項目を検索しようとしているが一致が見つかった場合は、行の末尾に文字または単語で最初の一致を表示します。

たとえば、マイファイル(test.html)には次のエントリが含まれています。

host= alpha-sfserver1
host= alphacrest3
host= alphacrest4
host= alphactn1 
host= alphactn2
host= alphactn3 
host= alphactn4
down alphacrest4

次のように重複項目を見つけることができます。 - (重複項目は常に2列にあるため、$ 2を使用します。)

awk '{if (++dup[$2] == 1) print $0;}' test.html

最後の項目(alphacrest4の下)を削除しますが、私が望むのは、次の単語または文字で重複する項目を表示することです。

host= alphacrest4 acked

どんな助けでも大歓迎です。

ベストアンサー1

ファイルを2回処理する必要があります。最初の実行時になりすましコンテンツをファイルに書き込みます。

awk '{if (++dup[$2] == 1) print $2;}' test.html > dupes.txt

2番目の実行では、すべての行をファイルの内容と比較します。

awk 'BEGIN { while (getline var <"dupes.txt") { dup2[var]=1; }};
  { num=++dup[$2]
    if (num == 1) { if (1 == dup2[$2]) print $0 " acked"; else print $0;} }' \
test.html

おすすめ記事