awk行の検索と単語の置換が正しく機能しません。

awk行の検索と単語の置換が正しく機能しません。
$ cat test.txt
#Instance|job_or_Box_name|Status | to_be_checked_for_T_or_F|Time_to_check|DaysTo_be_checked|Timezone |already_checked|Mail mesasge
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|N|MDS price for pcb 
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0600|123|BST|N| BW RTB Enterprise Services

私はこのような出力を得たい

#Instance|job_or_Box_name|Status | to_be_checked_for_T_or_F|Time_to_check|DaysTo_be_checked|Timezone |already_checked|Mail mesasge
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|Y|MDS price for pcb 
P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0600|123|BST|N|BW RTB Enterprise Services

2行目(変数)とフィールド8が変更されます。私は試した:

v="2"
line="P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|Y|MDS price for pcb"
awk -v v=$v -v v2=$line 'BEGIN { FS="|" ; OFS="|" }  $0 ~ v2 {$8 = "Y" ; print $0 }'  test.txt

ただし、正しく機能せずに各行の8番目の列を変換します。また試み

awk -v v=$v -v v2=$line 'BEGIN { FS="|" ; OFS="|" }  /v2/ {$8 = "Y" ; print $0 }'  test.txt

しかし、うまくいきません..

答え1

努力する

LINE="P51|EAMDEUEQTTAQPOSTRTSAVE_Box|SU|T|0500|12345|BST|N|"
awk -v v2="$line" 'BEGIN { FS=OFS="|" }  index($0,v2) {$8 = "Y" ; } {print;}' file.txt

どこ

  • index($0,v2)オンラインでフルラインフィールドを検索します。 (NR==v行番号検索を好む場合は、次のものを置き換えることができます。)
  • 一致するものが見つかると$8変更されます。
  • Next モード印刷フィールド

関連情報