答え1
これにより、期待される結果が印刷されます。
cut -f 1-3,5 file.tsv | sort -u | cut -f 4 | sort | uniq -c | awk '{ print $2, $1; }'
説明する:
cut -f 1-3,5 file.tsv
関連列1、2、3、5抽出
sort -u
固有の組み合わせの取得
cut -f 4
現在の列4の元の5番目の列値のみ抽出固有値のソート
sort | uniq -c
と計算列の
awk '{ print $2 "\t" $1; }'
交換と出力の書式設定
答え2
あなたは次のようなものが欲しいようです
awk '{test[$5" "$1" "$2" "$3]++}END{for (t in test) print t}' file1 | cut -d' ' -f1 | sort | uniq -c
歩いた
test[$5" "$1" "$2" "$3]++ #populates an array with unique combinations of these fields
for (t in test) print t #print each unique array index (field combination) once to STDOUT
cut -d' ' -f1 #extract what was the original 5th field
sort #yes, yes OK @Bodo
uniq -c #count the number of times it appears
出力
2 abc
1 def
編集する
@Bodoの手に敗北を認めながらも、awk
実行可能な解決策を探そうという意志は残り、この醜い獣を捧げます…
awk '!test[$5" "$1" "$2" "$3]{out[$5]++;test[$5" "$1" "$2" "$3]++}
END
{for (o in out) print o, out[o]}' file1