0

フィールド 1 の可変長キー フィールドとフィールド 2 のその他のデータで構成されるテキスト ファイルがあります。フィールドはタブ文字 ("\t") で区切られています。キー フィールドにはスペースが含まれています。ファイルはキー フィールドでソートされます。

これをフィルタリングして、重複するキー フィールド (つまり、フィールド 1) を持つレコードのみを含むファイルを作成し、レコードのグループを空白行で区切るという利点を追加したいと思います。

例えば

01001|XYZ ZY|\tFOO MAN CHU\n
01001|XYZ ZY|\tBAR BAZ\n

01001|ZZZYYYXX|\tYACKETY YACK\n
01001|ZZZYYYXX|\tBOBBITY BOP\n
01001|ZZZYYYXX|\tTESTING TESTING\n

...等。言い換えれば、uniq -d -D代替フィールド区切り文字または可変長フィールドのオプションを提供した場合、正確にはどうなるでしょうか!

既製の Unix フィルターを使用してコマンドでこれを達成する方法はありますか?

4

1 に答える 1

0

olivier が示唆するように awk を試してください。solaris で代わりに nawk を使用する場合:

awk -F '    '  '{arr[$1]++; next} 
               END{for(i in arr)
                   {if(arr[i]>1) {print i}}  } ' infile > keyfile 

awk -F '    '  'FILENAME=="keyfile" {arr[$1]=1;next}
              FILENAME=="infile"  
                   {if( $1 in arr){print $0}} ' keyfile infile > newfile

これは短くすることができますが、初心者にとってはより混乱を招きます。-F ' ' <- には、'' の間にタブ文字があります。

awk -F '    '  'NR==FNR {arr[$1]++; next}                                  
              (NR>FNR && arr[$1]>1) {print} '   infile infile > newfile 

バージョンを理解するのが厄介

于 2013-01-09T22:11:26.073 に答える