以下に「csv」スプレッドシートがあります。
abc,12345,qwerty,A
xyz,12380,qwetty,R
abc,12389,qwerty,A
xyz,12324,qwetty,R
列1、2、および4で同じ値を持つ行をマージしたいと思います。また、3列の最後の2文字を「**」に変更したいと思います。出力例は次のとおりです。
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
総ライン数が100万ラインを超えています!
答え1
まず、col1、col2、col4の順にファイルを並べ替えるには、次の手順を実行します。
$ sort -t, -k1,1 -k2,2 -k4,4 file
abc,12345,qwerty,A
abc,12389,qwerty,A
xyz,12324,qwetty,R
xyz,12380,qwetty,R
次に、2番目のフィールドを難読化するには、次のようにします。
$ sort -t, -k1,1 -k2,2 -k4,4 file | sed 's/..,/**,/2'
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
答え2
sort file | awk -F',' '{ sub(/..$/,"**",$2) }1' OFS=','
abc,123**,qwerty,A
abc,123**,qwerty,A
xyz,123**,qwetty,R
xyz,123**,qwetty,R
カンマ区切り文字をタブ文字に変更する場合。次のコマンドを使用できます。
sort file | sed 's/,/\t/g' | awk -F'\t' '{ sub(/..$/,"**",$2) }1' OFS='\t'
abc 123** qwerty A
abc 123** qwerty A
xyz 123** qwetty R
xyz 123** qwetty R