何度も走るランナーの名前を印刷したいマラソンファイルがあります。それは次のとおりです。
M, 2:08:58.0, John Lukas, USA, 1997-07-25, Paris, France
F, 2:15:04:0, Abebbe Boukari, KEN, 2000-10-01, London, UK
など。
uniqを試しましたが発生しませんでした。
uniq -d marathon | grep "[[:alpha:]]\+[ ]\+[[:alpha:]]"
ベストアンサー1
まず、名前で並べ替える必要があります。
注:「uniq」は、隣接しない限り重複行を検出しません。最初に入力をソートするか、「uniq」なしで「sort -u」を使用できます。
-t/-k
次のオプションを使用してこれらのフィールドを並べ替えることができます。
sort -t',' -k 3 marathon
カンマを区切り文字として使用して、3番目のフィールドをソートします。
その後、awkを使用して3列目のみを印刷し、次のコマンドを使用できますuniq
。
sort -t',' -k 3 marathon | awk -F, '{print $3}'|uniq -d
/!\未検証
すべての行を保持するには、awkを使用して名前の発生回数を保存できます(count[$3]++
)。名前のすべての行を保持します(lines[$3]=lines[$3]?lines[$3]+"\n"+$0:$0;
:最初の行の場合は行を保存し、それ以外の場合は追加)。最後にcount≥2の場合は、if(count[i]>1){ print lines[i]}
name()を使用して行を印刷します。
sort -t',' -k 3 marathon | awk -F, '{count[$3]++;lines[$3]=lines[$3]?lines[$3]+"\n"+$0:$0;}END{for (i in count){if(count[i]>1){ print lines[i]}}}'