[パイプ]区切り文字がある入力文字列があり、3番目と5番目の列の空の文字列を文字ごとに変更したいと|
思います。&
入力ファイル:
a a|b b|c c|d d|e e
f f|g g|h h|i i|j j
結果ファイル:
a a|b b|c&c|d d|e&e
f f|g g|h&h|i i|j&j
cc, ee, hh and jj
間のスペースが次のように置き換えられていることがわかります。以下を&
使用してファイルを読み取る代替ソリューションがあります。whileループ次に、区切り文字ベースのコマンドを使用してcut
位置ベースの変数に保存し、スペースを「&」に置き換え、sed
すべての区切り変数を1つの変数に追加し、新しいファイルに追加します。これを達成するために使用できるコマンドはありますか?
ベストアンサー1
これに使用されますawk
。
awk -F\| '{gsub(" ","\\&",$3); gsub(" ","\\&",$5)}1' OFS=\| infile.txt
、 "awk"にフィールドが
-F\|
パイプで区切られていることを伝えます(シェルによってエスケープされるので、次|
のように解釈しないでください)。\
pipeline stdin
-F"|"
、または)を使用できます-F'|'
。これ
gsub("regexp","replacement"[, INDEX])
" "
(スペース)を&
インデックス(列)のテキストに置き換える構文は、区切り文字に基づいて各インデックス位置について以下に示されています$3
。$5
|
a a|b b|c c|d d|e e ^^^|^^^|^^^|^^^|^^^ $1 |$2 |$3 |$4 |$5
詳しくはこちらなぜ我々は
\\&
そこから2回脱出したのですか? !1
最後に何を使用しますかawk '{...}1'
?これは awk の基本的な印刷ジョブ制御です。詳細を読むもう一度戻る
OFS=\|
か、指定された区切り文字を含むフィールドを印刷します|
。