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函数

暂无评论

写评论

您必须登录后才可以发表评论。

本人从事电脑网络维护工作多年,对电脑配置较为熟悉,闲暇之余精心搜罗了目前主流电脑配置清单推荐给大家。紧跟市场动态,定期更新电脑硬件配置方案,扫除一切垃圾坑爹配置,提供最具性价比的电脑配置清单!本站涵盖内容包括:电脑组装机配置单、电脑组装机报价、电脑组装机教程等,另外还提供很多技术文章供您学习!