2017-01-05 4 views
2

awkを使用してCSVファイルを元の列のサブセットのみを持つ新しいCSVファイルに変換します。また、列のうちの1つのみのスペースをアンダースコアに置き換える必要があります。私はこのようにしようとしました:CSVファイルの1つの列にある文字をawk gsubに置き換えます

gawk -F "," ' 
{ 
    name=gsub(/ /,"_",$1); 
    label=$2; 
    print ","name","label"," 
}' ./in.csv >> ./out.csv 

しかし、gsub()は、一致文字列ではなく、一致文字列を返します。私は一列に文字を置き換えるために、このようなawk GSUBを使うにはどうすればよい

,name_nospace,label 

,1,label 

の代わり:だから私はこのような何かを得ますか?

+0

サンプルデータと期待される出力はどうですか? –

答えて

4

ないでください:

name=gsub() 

gsubとして戻っ置換の数ではなく、文字列を。ただ、

gsub() 

、あなたがいじっ分野、すなわち印刷:sedは、変更を "名前" を変更することも

sed -e ':under' -e 's/^\([^[ ,]*\) /\1_/;t under' -e 's/^\([^,]*,[^,]*,\).*/,\1/' ./in.csv >> ./out.csv 
0
gawk -F "," ' 
{ 
    gsub(/ /,"_",$1); 
    # print only: ,NameValue,LabelValue, as output 
    # so 4 field with first and last empty as in OP 
    print "," $1 "," $2 "," 
}' ./in.csv >> ./out.csv 

を:

name=gsub(/ /,"_",$1) 

は(gawkは以降のmawkのみ)します

name=gensub(/ /,"_","g",$1) 

または(任意のawkの):また、あなたがしている場合は特に、ハードコーディングコンマの代わりにOFSを設定する必要があります

name=$1 
gsub(/ /,"_",name) 

変数を使用しての代わりに、直接フィールドを修正するためのいくつかの理由がありますと仮定し

awk ' 
BEGIN { FS=OFS="," } 
{ 
    name=$1 
    gsub(/ /,"_",name) 
    label=$2 
    print "", name, label, "" 
}' ./in.csv 

:スクリプトとして記述する必要がありますので、フィールドを修正します。

1

利用可能である。この場合、

gsub(/ /,"_",$1); 
label=$2; 
print "," $1 "," label "," # or whatever you were doing 
関連する問題