sedを使用してcsvファイル番号の小数部全体を削除しようとしています。私ができることは、ファイルの列全体ですべての小数点(たとえば.0)を切り捨てることです。しかし、6番目の列でのみこれを行う方法がわかりません。
入力する:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
343,No,2,"Collander, Mr. Erik Gustaf",male,28.0,0,0,248740,13.0,,S
76,No,3,"Moen, Mr. Sigurd Hansen",male,25.0,0,0,348123,7.65,F G73,S
予想出力:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
343,No,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13.0,,S
76,No,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S
私の試み:
sed -r ‘s/\.0//g’ file.csv
ベストアンサー1
ちょっとぎこちないけど仕事が終わったと思います。
Pythoncsvkit
パッケージCSVファイルを処理するためのコマンドラインツールが含まれています。とりわけ、csvcut
これは標準cut
コマンドのように機能しますが、CSVをサポートします。つまり、フィールドが正しく引用されている限り、フィールド区切り文字と改行を含めることができます。
を使用すると、編集csvcut
したい列を切り取り、修正してから元に戻すことができます。paste
フィールドを再整理するために、カンマを区切り文字として使用しました。このpaste
ユーティリティは、最初のいくつかのフィールド(未修正)、変更したいフィールド(sed
単純なスクリプトを使用して変更)、および最後のいくつかのフィールド(未修正)に対応する3つの入力ストリームを使用します。
paste -d, \
<( csvcut -c -5 file.csv ) \
<( csvcut -c 6 file.csv | sed '1!s/\..*//' ) \
<( csvcut -c 7- file.csv )
このsed
式は、1!s/\..*//
最初の行を除くすべての行から1つの点とその後のすべての内容を削除します。
これは、入力ファイル全体を3回読み取るため、少し効率的ではありません。
結果:
PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked
343,No,2,"Collander, Mr. Erik Gustaf",male,28,0,0,248740,13.0,,S
76,No,3,"Moen, Mr. Sigurd Hansen",male,25,0,0,348123,7.65,F G73,S