
私の入力データファイルabc.txtには次のものがあります。
"20131008","0004","0568","98"
このコマンドを実行してテキストを置き換えます。
nawk -F, -vOFS=',' '{gsub("0568","0808",$3); print }' abc.txt
出力では、区切り文字 "," はスペースで置き換えられます。出力は次のとおりです。
"20131008" "0004" "0568" "98".
この問題を解決するのに役立つ人はいますか?交換してみ-vOFS
ましたが役に立ちませんでした。
答え1
この回答は、awk
コマンドライン出力とファイル変更の両方の例と例を示しています。sed
の場合、コマンドライン出力(または変数)で変更された文字列を使用して受信しますawk
が$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
、元のファイルは変更されません。
$ cat input.txt
"20131008","0004","0568","98"
$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
"20131008" "0004" "0808" "98"
の場合、フラグは内部変更(つまり元のファイルの変更)を表す単純なsed
形式を使用します。sed -i 's/string to replace/new string/g' input.txt
-i
$ cat input.txt
"20131008","0004","0568","98"
$ sed -i 's/0568/0808/g' input.txt
$ cat input.txt
"20131008","0004","0808","98"
リクエストされたものではありませんがnawk
(私はインストールしていません)、助けてくれたことを願っています。
答え2
私は1つもいませんが、nawk
これが私に役立ちました(スイッチgawk
を使用)。--posix
awk 'BEGIN{FS=OFS=","}{sub(/0568/,"0808",$3)}1' file
Fedokhiによるコメント-v OFS=','
代わりに使用する必要がありますが、-vOFS=','
入力と出力の区切り文字が同じ場合、ブロックの割り当てがBEGIN
長すぎません。また一度だけ交換したいようですのでgsub
に変更させていただきます。sub
両方の関数の最初のパラメータは正規表現なので、文字列を渡さないでください。
出力:
"20131008","0004","0808","98"
答え3
私はこれを試しました:
nawk 'BEGIN { FS=OFS="," } { sub("0568","0808",$3) }1' abc.txt
良い結果。