アンダースコアをコンマで置き換え、CSVから二重引用符を削除します。

アンダースコアをコンマで置き換え、CSVから二重引用符を削除します。

CSVファイルがあります

input.csv

"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
"1_1_0_0_79"
"1_1_0_0_80"
"1_1_0_0_81"
"1_1_0_0_82"
"1_1_0_0_83"
"1_1_0_0_84"
"1_1_0_0_85"

.............など。

このCSVファイルを次のファイルに変換する必要があります。

result.csv 

1,1,0,0,76
1,1,0,0,77
1,1,0,0,78
1,1,0,0,79
1,1,0,0,80
1,1,0,0,81
1,1,0,0,82
1,1,0,0,83
1,1,0,0,84
1,1,0,0,85

ベストアンサー1

より簡単な方法は次のとおりです。tr

$ tr '_' ',' < input.csv | tr -d '"'                  
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

どのように機能するかは、tr置換する文字セットと置換という2つのパラメータを使用することです。この場合、文字コレクションは1つだけです。シェル演算子を介してinput.csv入力trの標準入力ストリームをリダイレクト<し、結果の出力をパイプしてtr -d '"'二重引用符を削除します。

しかし、awkそれは可能です。

$ cat input.csv
"1_1_0_0_76"
"1_1_0_0_77"
"1_1_0_0_78"
$ awk '{gsub(/_/,",");gsub(/"/,"")};1' input.csv
1,1,0,0,76
1,1,0,0,77
1,1,0,0,78

仕組みは少し異なります。 awkは各インラインスクリプトと同様に、各ファイルを1行ずつ読みます/Pattern match/{ codeblock}/Another pattern/{code block for this pattern}。これにはパターンがないので、これは各行に対してコードブロックを実行することを意味します。gsub()この関数は1行内でグローバル置換に使用されるため、アンダースコアをコンマで置き換え、二重引用符を空の文字列に置き換えます(文字を効果的に削除します)。欠落しているコードブロックのパターンマッチングの代わりに、デフォルトはその1行のみを印刷することです。言い換えれば、コードブロックがアクションをgsub()実行し、1結果を印刷します。

>出力を新しいファイルに送信するには、シェルリダイレクト()を使用します。

 awk '{gsub(/_/,",");gsub(/"/,"")};1' input.csv > output.csv

おすすめ記事