重複排除ツール(rmlint)のcsvファイルがあります。 awkを使用して、特定のフィールド(チェックサムなど)に対して同じ値を共有する行グループの後にダイビングラインを追加したいと思います。
文書:
type,path,size,checksum
emptydir,"/home/user/tree2/b",0,00000000000000000000000000000000
duplicate_dir,"/home/user/test/b",4,f8772f6fda08bbc826543334663d6f13
duplicate_dir,"/home/user/test/a",4,f8772f6fda08bbc826543334663d6f13
duplicate_dir,"/home/user/tree/b",8,62202a79add28a72209b41b6c8f43400
duplicate_dir,"/home/user/tree/a",8,62202a79add28a72209b41b6c8f43400
duplicate_dir,"/home/user/tree2/a",4,311095bc5669453990cd205b647a1a00
希望の出力:
type,path,size,checksum
------------------------
emptydir,"/home/user/tree2/b",0,00000000000000000000000000000000
------------------------
duplicate_dir,"/home/user/test/b",4,f8772f6fda08bbc826543334663d6f13
duplicate_dir,"/home/user/test/a",4,f8772f6fda08bbc826543334663d6f13
------------------------
duplicate_dir,"/home/user/tree/b",8,62202a79add28a72209b41b6c8f43400
duplicate_dir,"/home/user/tree/a",8,62202a79add28a72209b41b6c8f43400
------------------------
duplicate_dir,"/home/user/tree2/a",4,311095bc5669453990cd205b647a1a00
awkを使ってこれを行うにはどうすればよいですか?
答え1
前の値を保存し、現在の値が一致しない場合は、次の行を出力します。
awk -F, 'NR > 1 && $NF != prev { print "------------------------" } { prev = $NF } 1'
($NF
最後のフィールドなので、合わせて調整してください。)
ダッシュ数は、次のように簡単にカスタマイズできます。
awk -F, 'BEGIN { line = sprintf("%20s", ""); gsub(/ /, "-", line) }
NR > 1 && $NF != prev { print line } { prev = $NF } 1'
またはGNU AWKを使用してください。
awk -F, 'BEGIN { line = gensub(/ /, "-", "g", sprintf("%20s", "")) }
NR > 1 && $NF != prev { print line } { prev = $NF } 1'
「20」を適切な値に変更します。
答え2
区切り線の長さ(この場合は20)を選択できる他のバージョンは次のとおりです。
$ awk -F, -v i=$(printf -- '-%.0s' {1..20}) '{if(a==$NF){print;next}else{print i};print;a=$NF}' inputfile
type,path,size,checksum
--------------------
emptydir,"/home/user/tree2/b",0,00000000000000000000000000000000
--------------------
duplicate_dir,"/home/user/test/b",4,f8772f6fda08bbc826543334663d6f13
duplicate_dir,"/home/user/test/a",4,f8772f6fda08bbc826543334663d6f13
--------------------
duplicate_dir,"/home/user/tree/b",8,62202a79add28a72209b41b6c8f43400
duplicate_dir,"/home/user/tree/a",8,62202a79add28a72209b41b6c8f43400
--------------------
duplicate_dir,"/home/user/tree2/a",4,311095bc5669453990cd205b647a1a00