Bashスクリプトのみを使用して、CSVフィールドからコンマを削除します。

Bashスクリプトのみを使用して、CSVフィールドからコンマを削除します。

CSVファイルがあり、ipAddress列を編集してコンマを削除したいと思います。デフォルトでは、120.30.19, 119.234.76次のように変更する必要があります。 120.30.19 119.234.76

私のデータは次のとおりです。

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19, 119.234.761,Value1,Value2

私はそれになりたいです:

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddress,OtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

私が変更したい唯一のものはIPアドレスです。このコマンドを受け取りました: sed 's/\(\([^,]*,\)\{9\}[^,]*\),/\1/g'これは動作するdata.csvですが、IPAddressとOtherColumn1をマージして次の結果を得ます。

Name,Age,Gender,id,Phone,Address,City,State,Country,IPAddressOtherColumn1,OtherColumn2
John,25,Male,12,123,Main St,New York,NY,USA,120.30.19 119.234.761,Value1,Value2

私はこれが簡単な修正であることを知っていますが、どんな助けでも非常に感謝します。正直なところ、sedコマンドに問題があり、なぜそうするのかわかりません。シェルスクリプトや正規表現を実行する必要があるのは今回が初めてなので、端末にはまだ不足している点がたくさんあります。

ありがとうございます!

ベストアンサー1

"CSV"ファイルが破損しています。カンマ文字を含むすべてのフィールドを二重引用符で生成するように変更する必要があります。次にPerlを使用します(例:テキスト::CSV)またはPython(例:データセット) またはミラーこれを使用してください。 sed および awk は単純なカンマ区切りファイルには適していますが、カンマ、改行、またはその他の問題のある文字を含む引用符付きフィールドを含む実際の CSV ファイルには適していません。

しかし、あなたのIPアドレスはカンマとスペースで区切られているようです。常にそのような場合(スペースで始まる他のフィールドがない場合)、sedコマンドを使用してそのフィールドを見つけることができます。たとえば、次のようになります。

sed -e 's/, / /g'

おすすめ記事