AWK は次から始まる行を置き換えます。

AWK は次から始まる行を置き換えます。

$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正規表現なしで正しいコンテンツを一致させるように注意する必要があります。それから私たち$cont12そうですいいえで始まる行を一致させたい123。そのため、withの後に$cont数字ではなく数字(数字と[^0-9]仮定)を明示的に一致させます。$cont

このawkコマンドのように読み書きinfileしますoutfile

$contまたは、スラッシュが含まれている場合は$newLineContエスケープする必要があり\/$cont正規表現に他の特殊文字が含まれている場合でも正しくエスケープする必要があります。

おすすめ記事