BASH输出格式
我想使用BASH将日志文件的输出格式化为一行: 日志输出:BASH输出格式,bash,Bash,我想使用BASH将日志文件的输出格式化为一行: 日志输出: # egrep "^(Infected|Cleaned)" /var/log/scan.log Infected: files - 0, objects 0 Cleaned: files - 0, objects 0 我可以在一行上打印结果,但我不确定如何设置格式并删除空格: # egrep "^(Infected|Cleaned)" /var/log/scan.log | awk '/Infec
# egrep "^(Infected|Cleaned)" /var/log/scan.log
Infected: files - 0, objects 0
Cleaned: files - 0, objects 0
我可以在一行上打印结果,但我不确定如何设置格式并删除空格:
# egrep "^(Infected|Cleaned)" /var/log/scan.log | awk '/Infected/{if (x) print x; x="" } { x = (!x) ? $0 : x "; " $0 } END { print x }'
Infected: files - 0, objects 0; Cleaned: files - 0, objects 0
所需格式:
Infected:F-0, O-0; Cleaned:F-0, O-0"
又快又脏:
egrep "^(Infected|Cleaned)" /var/log/scan.log | awk '/Infected/{if (x) print x; x="" } { x = (!x) ? $0 : x "; " $0 } END { print x }' | sed 's/\s//g' | sed 's/files/F/g' | sed 's/objects/ O-/g' | sed 's/;/; /g'
又快又脏:
egrep "^(Infected|Cleaned)" /var/log/scan.log | awk '/Infected/{if (x) print x; x="" } { x = (!x) ? $0 : x "; " $0 } END { print x }' | sed 's/\s//g' | sed 's/files/F/g' | sed 's/objects/ O-/g' | sed 's/;/; /g'
我已经通过管道将输出传输到perl one liner,这应该可以做到
| perl -ne 's/\s+files\s+\-\s+/ F-/g; s/\s+objects\s+/ O-/g; print'
我已经通过管道将输出传输到perl one liner,这应该可以做到
| perl -ne 's/\s+files\s+\-\s+/ F-/g; s/\s+objects\s+/ O-/g; print'
干净的
将产生产出
Infected:F-0,O-0;Cleaned:F-0,O-0;
ORS
输出记录分隔符设置为代码>分隔不同的行
/Infected | Cleaned/
选择与模式匹配的行
编辑
添加跟踪换行符
awk '/Infected|Cleaned/{ORS=";"; print $1 "F-"$4 "O-"$6}END{print "\n"}'
或
干净的
将产生产出
Infected:F-0,O-0;Cleaned:F-0,O-0;
ORS
输出记录分隔符设置为代码>分隔不同的行
/Infected | Cleaned/
选择与模式匹配的行
编辑
添加跟踪换行符
awk '/Infected|Cleaned/{ORS=";"; print $1 "F-"$4 "O-"$6}END{print "\n"}'
或
尝试:
FS:字段分隔符,设置为一个或多个空格
ORS:输出的记录分隔符,设置为空格
使用该FS值,所需字段为1、4、6;后面的分隔符(“:”、“、”、“;”、等)将包括在内。请尝试:
FS:字段分隔符,设置为一个或多个空格
ORS:输出的记录分隔符,设置为空格
使用该FS值,所需字段为1、4、6;将包括尾随分隔符(“:”,“,”,“;”,resp.)。谢谢,有没有办法添加尾随新行?@HTF欢迎:)要添加尾随新行,只需在END
块中添加print”\n“
。将编辑答案谢谢,有没有办法添加尾随新行?@HTF欢迎:)要添加尾随新行,只需在END
块中添加print“\n”
。将编辑答案