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

我想使用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 '/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”
。将编辑答案