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