日期:2014-05-16  浏览次数:20982 次

shell/awk变量传递
本帖最后由 u013514345 于 2014-04-28 03:39:21 编辑
文件格式如下(均为字符串):

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等,也都还是不成功

谢谢!


------解决方案--------------------
#!/bin/bash

awk -F',' 'BEGIN{matched=0;} {if(matched){print "->"$0;next;} if(index($2,$1)){matched=1;print "=>"$0;}}' $1

------解决方案--------------------
[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)