1

現在、csvファイルを処理するスクリプトに取り組んでおり、スクリプトでcsvファイルのすべての空白フィールドを文字列「data_n/a」に置き換えようとしています。当初、私はこのタスクを実行するために次を使用するだけでよいと思っていました。

sed -e "s/hi/data_n\/a/g"

ただし、残念ながら、csvファイルの行の最初または最後に発生する可能性のある空のフィールドは除外されます。どうすればいいのかわからないので、誰かが私を正しい方向に押し進めたり、私が何をすべきかについてアドバイスを提供したりできるかどうか疑問に思いました。ありがとう!

csvファイルのサンプルもここにあります:

,,6004,,,15:00.00,30004,Colleen,2010-02-10
2,Closed,6005,,,30:00.00,30005,Rich,2010-02-11
7,Closed,6001,,,30:00.00,10001,Mary Beth,2010-02-11
4

4 に答える 4

3

perl正規表現を使用して、

   perl -pe 's;^,|,$|(?<=,),;data_n\/a,;g' input.cvs

sedを使用して、

$ sed -r 's;^,|,$;data_n\/a,;g
:l
s;,,;,data_n\/a,;g
t l' input.cvs
于 2012-12-01T06:52:14.457 に答える
2

awkがオプションの場合は、次のことを試すことができます。

awk -F, '{for(i=1;i<=NF;++i){if($i==""){printf "data_n/a"}else{printf $i} if(i<NF)printf ","} printf "\n"}' infile
于 2012-12-01T04:50:22.077 に答える
0

^ は行頭を示し、$ は行末を示します

sed "s/,,/data_n\/a,/g;s/^,/data_n\/a,/;s/,$/,data_n\/a/" file >outfile
于 2012-12-01T07:07:44.553 に答える
0

これはうまくいくかもしれません(GNU sed):

sed -r ':a;s/(^,)|(,)(,)|(,)$/\2\4data_n\/a\1\3/g;ta' file
于 2012-12-01T08:54:31.470 に答える