参考文章1http://blog.chinaunix.net/uid-23302288-id-3785105.html
参考文章2https://www.runoob.com/linux/linux-comm-awk.html
参考文章3https://blog.youkuaiyun.com/start_2013/article/details/109516934
awk用来处理文本,按行读取进行处理
一、指定分隔符分割文本
log.txt中的文本内容
2 this is a test
3 Do you like awk
This's a test
10 There are orange,apple,mongo
命令格式
awk -F
格式 awk -F[分隔符] '{动作}' 文件名
- 不指定分隔符的类型,默认是空格或者tab
$0: 每行的所有字符串
$1: 每行切分后的第1个字符串
$2: 每行切分后的第2个字符串
awk '{print $1,$2}' log.txt
没有指定分隔符,使用空格或者tab,将每行的文本内容分开,打印每行、经过切分后的第一个和第二个字符串
输出

awk -F, '{print $1,$2}' log.txt - 使用单个分隔符
,对文本进行切分,由于每行都没有,,原样输出文本内容

- 使用多个分隔符
空格和,对文本进行切分
awk -F'[ ,]' '{print $1,$2}' log.txt

用两个分隔符-F '/|.json'.这里的分隔符是/和json,两者用|分开
二、按条件过滤文本
- 过滤第一列大于2的行
awk '$1>2' log.txt #命令

- 过滤第一列大于2的行,输出该行的前两个字符串
awk '$1>2 {print $1,$2}' log.txt

- 同时满足两个条件。过滤第一列大于2并且第二列等于
Do的行
awk '$1>2 && $2=="D" {print $1,$2,$3}' log.txt

- 按列数和行数处理

三、在行首/行尾添加文本
摘自https://blog.youkuaiyun.com/start_2013/article/details/109516934
在前面、后面、指定列添加相同字符
(1)给一个文件中的每一行开头插入字符的方法:awk '{print "需要添加的字符" $0}' fileName
(2)给一个文件中的每一行结尾插入字符的方法:awk '{print $0 "需要添加的字符" }' fileName
(3) 在指定列前添加字符
awk.txt的文本信息如下

- 在第一列前加"1start",在第一列后添加"1end",在第2列前加"2start",在第二列后添加"2end"
- 语句
awk '{print "1start " $1 " 1end", "2start " $1 " 2end"}' awk.txt 
四、设置变量
参考https://www.runoob.com/linux/linux-comm-awk.html

awk -v src_img_dir_name='abc' -F '/|.json' '$11 >0.85 {print "../x3_person/images_org/"src_img_dir_name"/"$10 ".json"}' ${txt_path}.
用/和json划分txt_path文件中每一行的内容,然后将每行中第11个元素的值大于0.85的,输出../x3_person/images_org/"src_img_dir_name"/"$10,src_img_dir_name是在awk中设置变量名

txt_path文档中,第一个数值大于person_num变量有多少行
group_num=$(awk -v person_num="${person_num}" '$1 > person_num' "${txt_path}" | wc -l)
五、应用实例
1. 统计yolo模型推理出的某个类别的目标数
find file_name -name "*.txt" | xargs awk -F '[ ]' '$1=cls {print $0}' | wc -l
例:find exp10_ep500_10326 -name "*.txt" | xargs awk -F '[ ]' '$1==0 {print $0}' | wc -l
- 先找出所有的推理结果文件(txt文件)
- 用awk处理每个文件(txt文件的格式如下,第一个值是类别),取类别为cls的目标的数量

这篇文章详细介绍了awk命令在Linux环境中的使用,包括指定分隔符处理文本、按条件过滤内容、在行首行尾添加文本、设置变量以及实际应用案例。awk是一个强大的文本分析工具,能方便地对文件进行切分、处理和打印操作。
2338

被折叠的 条评论
为什么被折叠?



