awk-特定の列の1文字だけを置き換える


13

次のようなファイルがあります。

2018.01.02;1.5;comment 1
2018.01.04;2.75;comment 2
2018.01.07;5.25;comment 4
2018.01.09;1.25;comment 7

.2番目の列のすべてのドットをコンマで置き換えたいのです,が、これをsed 's/\./\,/g' fileどのように使用できるsedか、できれawkば2番目の列にのみ適用するので、出力は次のようになります。

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7

回答:


22
$ awk 'BEGIN{FS=OFS=";"} {gsub(/\./, ",", $2)} 1' ip.txt
2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
  • BEGIN{} このコードブロックは、入力行を処理する前に実行されます
  • FS=OFS=";" 入力フィールドと出力フィールドの区切り文字を次のように設定します ;
  • gsub(/\./, ",", $2)各入力行について.、2番目のフィールドのすべてを,
  • 1$0(入力レコードを含む)の内容を印刷するawkイディオムです。

1
すごい、THX!
1

9
sed 's/\./,/3' file

ドットの3番目の出現を置き換える


2
別のUselesの使用cat...なぜただではないのsed 's/\./,/3' fileですか?(また、コンマをエスケープする必要はありません。)
twalberg

私は観察を考慮に入れました
Emilio Galarraga

catここでは必ずしも役に立たないでしょう。2つのコアを使用できるようになります。
ron rothman

@ronrothmanコアを実行する目的は、catリソースを使い果たす以外に何でしょうか?たぶん少しのバッファを提供するが、その後、この意図は、より良いようなツールで表現されなければならないbufferことでよりcat
Roland Illig

(ブロッキング)ディスク読み取りを文字列置換から切り離すため。はい、私はあなたがそれをバッファリングと考えることができると思います。
ron rothman

4

awkを使用して以下の方法で実行

コマンド: awk -F ";" '{gsub(/\./,",",$2);print $1";"$2";"$3}' filename

出力

2018.01.02;1,5;comment 1
2018.01.04;2,75;comment 2
2018.01.07;5,25;comment 4
2018.01.09;1,25;comment 7
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.