私は常に2番目のフィールド、nameというフィールド/列を持つCSVファイルで作業しています。
この列の値は、「Smith、John」、「Brady、Tom」、「Manning、Peyton」などです。
コンマ(「Smith John」や「Brady Tom」など)を使用せずにすべての項目を変更せずにこれを行うにはどうすればよいですか? sed awkを試してみましたが、理解できません。
ベストアンサー1
示されているようにフィールドが正しく引用されている場合、挿入されたコンマは問題になりません(CSV認識パーサーを使用してデータを読み取ると仮定)。
それでも名前付きフィールドからカンマを削除する必要がある場合は、name
CSVをサポートするパーサーを使用してください。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