2012-05-02 5 views
4

テキストファイルがあり、最初の列の特定の文字(。)を別の文字( - )に置き換えようとしています。すべてのフィールドはコンマで区切られています。行の中には、最後の3列が空であるため、最後に3つのカンマがあります。テキストファイルのテキストの最初の列の特定の文字を置換する

例: '' 私は交換するのawkを使用したみました何

abc.def.ghi,123.4561.789,ABC,DEF,GHI 
abc.def.ghq,124.4562.789,ABC,DEF,GHI 
abc.def.ghw,125.4563.789,ABC,DEF,GHI 
abc.def.ghe,126.4564.789,,, 
abc.def.ghr,127.4565.789,,, 

最初の列に ' - 'をつけて内容を出力します。

ETA:sarnoldの提案を試して、私が望む出力を得ました。

ETA2:最初の列が長くなる可能性があります。最初の3分だけを変更する方法はありますか? ' 「 - 」への最初の列に、私は

abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI 
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI 
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI 
abc-def-ghe-qqq.www,126.4564.789,,, 
abc-def-ghr-qqq.www,127.4565.789,,, 

答えて

7

.出力を得るには、「任意の文字」のための正規表現の表記法です。 \でそれをエスケープし、それが.意味:

$ awk -F, '{gsub(/\./,"-",$1); print}' textfile.csv 
abc-def-ghi 123.4561.789 ABC DEF GHI 
abc-def-ghq 124.4562.789 ABC DEF GHI 
abc-def-ghw 125.4563.789 ABC DEF GHI 
abc-def-ghe 126.4564.789 
abc-def-ghr 127.4565.789 
$ 

出力フィールド区切り文字は、デフォルトでは、スペースです。それを設定するOFS = ","を設定します。

$ awk -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); print}' textfile.csv 
abc-def-ghi,123.4561.789,ABC,DEF,GHI 
abc-def-ghq,124.4562.789,ABC,DEF,GHI 
abc-def-ghw,125.4563.789,ABC,DEF,GHI 
abc-def-ghe,126.4564.789,,, 
abc-def-ghr,127.4565.789,,, 

これはまだ複数のフィールドを変更することができます:

$ awk -F, 'BEGIN {OFS=","} {gsub(/\./,"-",$1); gsub("1", "#",$2); print}' textfile.csv 
abc-def-ghi,#23.456#.789,ABC,DEF,GHI 
abc-def-ghq,#24.4562.789,ABC,DEF,GHI 
abc-def-ghw,#25.4563.789,ABC,DEF,GHI 
abc-def-ghe,#26.4564.789,,, 
abc-def-ghr,#27.4565.789,,, 

私はを行いますが、それはサポートされているコマンドラインオプションではありません何-OFS,知りません。それを使用して出力フィールド区切りを設定することは、私の間違いでした。 awkプログラム内のOFSを設定するとうまくいきます。

+0

感謝を!あなたの提案を試して元の投稿に追加しました。 – Rayne

+0

Hunh、なぜ '-OFS 'を追加すると実際に2番目の列の出力も変わったのですか? – sarnold

+0

うーん、わかりませんが、私が望む出力が得られ、2番目の列は変更されませんでした。 – Rayne

3

これはあなたのために働くかもしれない:

awk -F, -vOFS=, '{for(n=1;n<=3;n++)sub(/\./,"-",$1)}1' file 
abc-def-ghi-qqq.www,123.4561.789,ABC,DEF,GHI 
abc-def-ghq-qqq.www,124.4562.789,ABC,DEF,GHI 
abc-def-ghw-qqq.www,125.4563.789,ABC,DEF,GHI 
abc-def-ghe-qqq.www,126.4564.789,,, 
abc-def-ghr-qqq.www,127.4565.789,,, 
関連する問題