大きな.csvファイルの最初の2列を参照

大きな.csvファイルの最初の2列を参照

約2500万行の大容量CSVファイルがあります。256リスト。 CSVファイルのフィールド区切り文字は~文字です。

次のように、データの最初の2つの列を変更したいと思います。

From : data1~data2~data3..................................
To   : "data1"~"data2"~data3................................

現在使用していますが、awk次のようになります。

cat file | awk -F "~" '{print "\""$1"\"""\""$2"\"~"$3"~"$4"~"...................}'

たとえば、awkに256列を入力します。$4"~"$5"~"$6"~".....$256"~"

これをコーディングする他のより良い方法はありますか?

答え1

いいえ、256フィールドをすべて指定する必要はありません。最初の列と2番目の列を変更して以下を実行し、ファイルを個別に読み取るためにwhileを使用せずにprint一緒に実行します。OFS='~'catawkawk

awk -F'~' '{$1="\""$1"\""; $2="\""$2"\""; print}' OFS='~' infile

最後の2つのフィールドを変更します。

awk -F'~' '{$(NF-1)="\""$(NF-1)"\""; $NF="\""$NF"\""; print}' OFS='~' infile

答え2

普通sedに書く

sed 's/[^~]*/"&"/;s//"&"/2'

しかし、大容量ファイルに言及しました。はるかに早く上記のソリューションやバージョンよりawk

sed 's/\(^[^~]*\)~\([^~]*\)/"\1"~"\2"/'

あるいは、拡張正規表現を使用して読みやすくすることもできます。

sed -E 's/(^[^~]*)~([^~]*)/"\1"~"\2"/'

関連情報