この記事を見ると(コメントは文書の一部ではなく説明の一部です)...
x,a,001,b,c,d,y
x,a,002,b,c,e,yy
x,bb,003,b,d,e,y
x,c,004,b,d,e,y
x,c,005,b,d,e,y # nb - dupe of row 4
x,dd,006,b,d,e,y
x,c,007,b,d,e,y # nb - dupe of row 4 and 5
x,dd,008,b,d,f,y
x,dd,009,b,d,e,y # nb - dupe of row 6
x,e,010,b,d,f,y
...次のような出力を得たいです。
x,a,001,b,c,d,y
x,a,002,b,c,e,yy
x,bb,003,b,d,e,y
x,c,004,b,d,e,y
x,dd,006,b,d,e,y
x,dd,008,b,d,f,y
x,e,010,b,d,f,y
ファイルから3番目の列を削除してからファイルからuniqを実行し、残りの行の3番目の列の値が正しい場所に再度追加された場合は、上記の結果が得られます。
しかし、私は本当にそのようなことができる何かを思い出そうと努力しています。私はLinuxのテキスト処理ユーティリティについて学ぶ機会を歓迎しました。
パフォーマンス:ファイルが1MBを超えることは不可能に見え、1日に1つのファイルのみが生成されます。
対象: Debian GNU/Linux 7 amd64, 256MB/Xeon.
編集:フィールドが固定幅ではないため、例を適用すると、uniq --skip-chars=n
関連する解決策がわかっている限り機能しません。
ベストアンサー1
これにより、awk
次のことができます。
awk -F, -vOFS=, '{l=$0; $3=""}; ! ($0 in seen) {print l; seen[$0]}'