CSVのフィールドからカンマを削除する方法は?

CSVのフィールドからカンマを削除する方法は?

私は常に2番目のフィールド、nameというフィールド/列を持つCSVファイルで作業しています。

この列の値は、「Smith、John」、「Brady、Tom」、「Manning、Peyton」などです。

コンマ(「Smith John」や「Brady Tom」など)を使用せずにすべての項目を変更せずにこれを行うにはどうすればよいですか? sed awkを試してみましたが、理解できません。

ベストアンサー1

示されているようにフィールドが正しく引用されている場合、挿入されたコンマは問題になりません(CSV認識パーサーを使用してデータを読み取ると仮定)。

それでも名前付きフィールドからカンマを削除する必要がある場合は、nameCSVをサポートするパーサーを使用してください。csvkitまたはミラーmlr)データ処理。

Millerを使用した例は次のとおりです。

mlr --csv put '$name = gsub($name, ",", "")' file.csv

その後、CSVからデータを読み込みfile.csv、見つかったものと同様の置換機能を使用して、名前付きawkフィールドからすべてのコンマを削除し、変更された可能性があるnameレコードを出力します。

例:

$ cat file.csv
age,name,note
47,"Hatter, Mad","Isn't actually ""mad"""
39,"Rabbit, White",Drinks too much tea
2,"Dormouse, The",Sleeps most of the time
$ mlr --csv put '$name = gsub($name, ",", "")' file.csv
age,name,note
47,Hatter Mad,"Isn't actually ""mad"""
39,Rabbit White,Drinks too much tea
2,Dormouse The,Sleeps most of the time

csvformat(csvkit から) と の場合、tr以下はドキュメントの区切り文字を一時的にセミコロンに変更してすべてのコンマを削除します。

csvformat -D ';' file.csv | tr -d , | csvformat -d ';'

例:

$ csvformat -D ';' file.csv | tr -d , | csvformat -d ';'
age,name,note
47,Hatter Mad,"Isn't actually ""mad"""
39,Rabbit White,Drinks too much tea
2,Dormouse The,Sleeps most of the time

csvsqlまたは(csvkitでも)一部のSQLを介してフィールドからコンマを削除するために使用できます。name

csvsql --query 'UPDATE file SET name = REPLACE(name, ",", "")' \
    --query 'SELECT * FROM file' file.csv

おすすめ記事