当前位置: 技术问答>linux和unix
shell/awk变量传递
来源: 互联网 发布时间:2017-05-17
本文导语: 本帖最后由 u013514345 于 2014-04-28 03:39:21 编辑 文件格式如下(均为字符串): s1, s11 s12 s13 s2, s21 s22 s23 s24 s3, s31 s32 我现在想要对每一行搜索,第一个字符串是否是后面这些串的子串 只要有一次成功,就输出,...
s1, s11 s12 s13
s2, s21 s22 s23 s24
s3, s31 s32
我现在想要对每一行搜索,第一个字符串是否是后面这些串的子串 只要有一次成功,就输出,如果都不成功,则忽略 例如:
abc, abcd ed df dff (匹配成功)
xyz, abc sdd xxx (匹配失败)
在每行处理中,我现在是用awk print $1提取出第一个串,然后awk print $2提取出逗号后面的串,再for循环处理
在外部循环中(针对每行)设置一个全局变量flag,只要awk循环匹配成功一次,就set flag为1,然后打印这一行 如果for循环结束,flag仍为0,则忽略 请问这个flag的处理应该处理编码?搜了一下方法,比如用eval等,也都还是不成功
谢谢!
|
[root]# cat a.txt
abc, abcd1 ed df dff
abc, abcd2 ed df dff
xyz, abc sdd xxx
[root]# awk -F ',' '{if(match($2,$1))print $0" (matched yes)";else print $0" (matched no)"}' a.txt
abc, abcd1 ed df dff (matched yes)
abc, abcd2 ed df dff (matched yes)
xyz, abc sdd xxx (matched no)
abc, abcd1 ed df dff
abc, abcd2 ed df dff
xyz, abc sdd xxx
[root]# awk -F ',' '{if(match($2,$1))print $0" (matched yes)";else print $0" (matched no)"}' a.txt
abc, abcd1 ed df dff (matched yes)
abc, abcd2 ed df dff (matched yes)
xyz, abc sdd xxx (matched no)
|
#!/bin/bash
awk -F',' 'BEGIN{matched=0;} {if(matched){print "->"$0;next;} if(index($2,$1)){matched=1;print "=>"$0;}}' $1