$ 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
发生更改, - 下一个模式打印字段