特定の列に重複データを表示し、元の行番号を提供する簡単なコマンドを作成しようとしています。
ファイルの例:
JENNIE;30;DOCTOR;F
SARA;26;POLICE;F
EDWARD;32;TEACHER;M
ROBERT;44;POLICE;M
次のコマンドを使用すると、列3で重複した内容を取得できます。
cat FILE.txt |cut -d ";" -f3 | sort | uniq -d
問題は、結果の元の行番号を取得する必要があることです。
私のコマンドは以下を示しています:
POLICE
POLICE
欲しい
2- POLICE
4- POLICE
ベストアンサー1
GNUsort
とGNUを使用すると、uniq
次のことができます。
$ <FILE.txt awk -F';' '{print NR"- "$3}' | sort -st' ' -k2 | uniq -Df1
2- POLICE
4- POLICE
行は最初にテキストの語彙順に並べ替えられ、次に数字順に並べ替えられます(-s
同様に並べ替えられたテキストの元の順序を保持)。| sort -n
行番号で並べ替えるには、1つを追加してください。
単独で使用awk
:
awk -F';' '!x {c[$3]++}; x && c[$3] > 1 {print FNR"- "$3}' FILE.txt x=1 FILE.txt