
$cont
変数の内容で始まるファイルの行を変更したいと思いますawk
。
5473 12G Ju 2 06:32 part3
5423 11G Ju 6 07:32 part4
573 11G Ju 2 08:21 part5
5473 11G Ju 6 09:12 part6
5423 1G Jl 6 09:32 part7
私はsed
今それを使っていますが、同じことをするのに時間がかかりすぎています。
sed
コードは以下のように表示されます。
今から始まる行を見つけて削除し、ファイル$cont
に書き込みます。$cont
cont="foo"
newLineCont ="this is new line"
parallel -a test.txt -k --block 30M --pipe-part "sed -i /^$cont/d" test.txt
echo $newLineCont >> test.txt
AWKを使用して、ファイル内の$ cont変数の内容で始まる行を検索し、それを$ newLineContの内容に置き換えたいと思います。
答え1
$newLineCont
スペースで区切られた最初のフィールドが同じ場合は、各行全体を次に置き換えます$cont
。
awk -v c="$cont" -v nc="$newLineCont" '$1 == c { $0 = nc } 1' <infile >outfile
それから。infile
という名前の新しいファイルを読み取り、生成しますoutfile
。行の最初のフィールドが等しい場合、$cont
行全体が置き換えられます$newLinecont
。
末尾はすべての行を印刷する1
簡単な作成方法です。{ print }
取るStéphane Chazelasは以下についてコメントしました。次の点を考慮してください(1つまたは両方の変数にバックスラッシュが含まれている場合)。
env c="$cont" nc="$newLineCont" awk '$1 == ENVIRON["c"] { $0 = ENVIRON["nc"] } 1' <infile >outfile
使用sed
:
sed "s/^$cont[^0-9].*/$newLineCont/" <infile >outfile
を使用している場合は、sed
正規表現なしで正しいコンテンツを一致させるように注意する必要があります。それから私たち$cont
は12
そうですいいえで始まる行を一致させたい123
。そのため、withの後に$cont
数字ではなく数字(数字と[^0-9]
仮定)を明示的に一致させます。$cont
このawk
コマンドのように読み書きinfile
しますoutfile
。
$cont
または、スラッシュが含まれている場合は$newLineCont
エスケープする必要があり\/
、$cont
正規表現に他の特殊文字が含まれている場合でも正しくエスケープする必要があります。