示例文件有6列“;”分离器:
temp;abcd;YES;1234;pqrs;YES
aaaa;bccc;YES;1234;pqrs;YES
ramy;uqq;YES;adda;1234;YES
..
..
..
现在搜索多个模式(要搜索的模式可以是1或更多)说temp和bccc,并在匹配的行中用NO替换第6个(或最后)分隔的单词模式。
即预期输出应为
temp;abcd;YES;1234;pqrs;NO
aaaa;bccc;YES;1234;pqrs;NO
ramy;uqq;YES;adda;1234;YES
..
..
..
进行文件内编辑会非常好,因为我将在递归循环中使用代码,其中要搜索的多个模式将在shell变量中动态分配。 / p>
这样的事情:
var='temp|abcd'
grep $var filename |
基于匹配的模式,用NO替换第6个或最后一个工作,文件具有;分隔符。
答案 0 :(得分:0)
让我们尝试使用awk!
假设您的数据位于a.txt
文件中,并且您编写了一小段代码a.awk
:
#!/bin/awk -f
BEGIN { OFS=";" ; FS=";" ; print "start\n---------------" }
{
if ( $0 ~ var )
{ print $1,$2,$3,$4,$5,"NO" }
else
{ print $0 }
}
END { print "---------------\nend" }
shell
variable to hawk。~
来解析var
内的regexp awk
如何工作:3部分,中间部分重复输入文件的每一行。 然后您可以调用以下代码:
awk -f a.awk -v var="abcd|temp" a.txt
或者作为一个单行:
awk -v var="abcd|temp" -F";" \
'{ if($0~var){print $1";"$2";"$3";"$4";"$5";NO"} else {print} }' a.txt
要了解有关它的更多信息,请参阅great tutorial。