awkを介して多数の.tsv
ファイルを処理していますが、列2で重複しているか、または同じ値が観測されているすべての行を削除する必要があります。
例えば
a b c
value1 2 3
value2 2 5
value3 1 9
value4 1 0
value5 4 0
value6 1 0
しなければならない
a b c
value5 4 0
使用を検討しましたが、sort -k2 filename | awk 'count[$2]++ > 1'
奇妙な結果が出ました。
$ sort -k2 file.txt | awk 'count[$2]++ > 1' | wc
162 4212 33348
$ sort -k2 file.txt | awk 'count[$2]++ == 1' | wc
3954 102804 704176
$ wc file.txt
1029257 26760682 176254913
...合計は1029257でなければならないので意味がありません。私は何が間違っていましたか?
ベストアンサー1
awk
$2
ファイルを1行ずつ繰り返すので、現在の行のフィールドがファイル内で一意であるかどうかはわかりません。
ファイルを2回開く必要があります。 1つ目は計算用で、2つ目は印刷用ですcount[$2] == 1
。
awk '
NR==FNR && FNR>1 {count[$2]++};
NR>FNR && (FNR==1 || count[$2] == 1)
' file.txt file.txt
NR==FNR
FNR>1
ヘッダーを計算したくないので、最初のファイルでのみtrueになるように追加しました。NR>FNR
これは2番目のファイルにも当てはまります。- ヘッダー(
FNR==1
)またはの場合はcount[$2]
印刷します1
。
- ヘッダー(