約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='~'
cat
awk
awk
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"/'