sed:csvファイル列の小数点以下の切り捨て

sed:csvファイル列の小数点以下の切り捨て

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

おすすめ記事