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

第二行(变量)和第 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发生更改,
  • 下一个模式打印字段

相关内容