如何修改awk查找结果显示格式 输出带行号的竖线分隔内容
实现awk输出带匹配行号的结果
现有场景
当前data.csv文件内容示例:
0,H,"First Job" 0,M,"Second Job" 0,L,"Third Job" ...
现有搜索逻辑为执行./find.sh <关键词>,在文件第3列匹配对应关键词,原始find.sh脚本内容如下:
#!/bin/bash awk -F"," -v findit="$1" '$3 ~ findit' data.csv
需求为修改输出格式,在每行匹配结果最前面标注对应内容所在的文件行号,目标输出格式示例:
3 | 0 | L | "Third Job"
示例开头的数字即为匹配结果所在的行号。
修改方案
直接使用awk内置的NR变量即可实现需求,该变量会自动记录当前处理行的行号(从1开始计数),只需要调整awk的打印规则,按要求拼接输出字段即可,修改后的find.sh内容如下:
#!/bin/bash awk -F"," -v findit="$1" '$3 ~ findit {print NR " | " $1 " | " $2 " | " $3}' data.csv
- 原有的第三列模糊匹配关键词的逻辑完全保留,不需要改动
NR为awk内置变量,无需额外编写计数逻辑即可自动获取当前行号- 打印语句按照
行号 | 第一列 | 第二列 | 第三列的格式拼接,和要求的输出格式完全匹配
内容的提问来源于stack exchange,提问作者Ali Abdi
相关产品推荐
相关产品推荐

