awk显示某一个字段在第几行第几列

来源:互联网 发布:家暴经历 知乎 编辑:程序博客网 时间:2024/04/28 02:57

今天最有收获的算是这篇blog了,虽然花了点时间去理解,不过还是蛮欣慰的

总算是找出解决办法了,而且学到了新东西

切入正题:

这里面主要是

awk里面使用for循环

然后for循环又嵌套了if语句

之后if语句里又用到了awk的条件表达式

另外还可能涉及到定义awk内置变量


原文件内容是

[root@localhost zhaoyj]# cat file.txt
Mike Harrington:[510] 548-1278:250:100:175
Christian Dobbins:[408] 538-2358:155:90:201
Susan:[206] 654-6279:250:60:50
Archie McNichol:[206] 548-1348:250:100:175

现在要做的是:

查找“Susan”这个字段所在的行号和列号,并以一定的格式输出

输出格式为:

Susan:    "数字1"Line  " 数字2"Column


使用awk内置变量:
[root@localhost zhaoyj]# awk -F: -v str="Susan" '{v="";for (i=1;i<=NF;i++)  if ($i==str) v=v?"":i;if (v) print str":\t"NR"Line"v"Column"}' file.txt
Susan:  3Line1Column


定义awk内置变量  str=“Susan”

初始化v的值为空     v=""

对每行的字段进行循环   for (i=1;i<=NF;i++)

判断字段是否匹配“Susan”     if ($i==str)

如果匹配的话进而判断v的值     v=v?

如果v没有值的话,给它赋值为i【字段号】?"":i

如果v不为空,则输出结果  if (v) print str":\t"NR"Line"v"Column"

PS: v=v?"":i  这是awk条件表达式


不使用awk内置变量,而且使用match函数

[root@localhost zhaoyj]# awk -F:   '{v="";for (i=1;i<=NF;i++)  if (match($i,/Susan/)) v=v?"":i;if (v) print "Susan"":\t"NR"Line  "v"Column"}' file.txt
Susan:  3Line  1Column

这条命令与上述的不同之处就是if判断那块将

if ($i==str)

改成了

if (match($i,/Susan/))

if判断中调用match函数

有种感觉:

善于发现和探索的东西总能让你喜出望外奋斗

各位童鞋们,晚安,好想好好睡一觉
原创粉丝点击