![awk 行搜索和单词替换无法正常工作](https://linux22.com/image/94599/awk%20%E8%A1%8C%E6%90%9C%E7%B4%A2%E5%92%8C%E5%8D%95%E8%AF%8D%E6%9B%BF%E6%8D%A2%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
$ 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
发生更改, - 下一个模式打印字段