Regex 使用awk打印正则表达式后的所有行,并更改输出字段分隔符
我一直在使用中的“b”示例返回模式匹配(空行-$^)后的所有行,直到EOF才包括匹配。第一个示例是用于引用的未过滤输出(包括“Loading support for…”之后的空行),第二个示例是当前使用awk获得的输出Regex 使用awk打印正则表达式后的所有行,并更改输出字段分隔符,regex,awk,pattern-matching,Regex,Awk,Pattern Matching,我一直在使用中的“b”示例返回模式匹配(空行-$^)后的所有行,直到EOF才包括匹配。第一个示例是用于引用的未过滤输出(包括“Loading support for…”之后的空行),第二个示例是当前使用awk获得的输出 [root@servername ~]# yum -C check-update 2>/dev/null Loaded plugins: kabi, product-id, refresh-packagekit, security, subscription-manager
[root@servername ~]# yum -C check-update 2>/dev/null
Loaded plugins: kabi, product-id, refresh-packagekit, security, subscription-manager
Loading support for Red Hat kernel ABI
kernel.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-abi-whitelists.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-devel.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-doc.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-firmware.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-headers.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
[root@servername ~]# yum -C check-update 2>/dev/null | awk 'f;/$^/{f=1}'
kernel.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-abi-whitelists.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-devel.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-doc.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-firmware.noarch 2.6.32-431.5.1.el6 rhel-6-server-rpms
kernel-headers.x86_64 2.6.32-431.5.1.el6 rhel-6-server-rpms
我不知道如何将awk命令更改为使用不同的输出字段分隔符“,”以CSV格式输出。我希望输出如下所示:
kernel.x86_64,2.6.32-431.5.1.el6,rhel-6-server-rpms
kernel-abi-whitelists.noarch,2.6.32-431.5.1.el6,rhel-6-server-rpms
kernel-devel.x86_64,2.6.32-431.5.1.el6,rhel-6-server-rpms
kernel-doc.noarch,2.6.32-431.5.1.el6,rhel-6-server-rpms
kernel-firmware.noarch,2.6.32-431.5.1.el6,rhel-6-server-rpms
kernel-headers.x86_64,2.6.32-431.5.1.el6,rhel-6-server-rpms
编辑:
试着把它保持在awk和作为一个班轮。我本可以直接进入awk'{OFS=“,”}$2=$2'
sed 's/\t+/,/g' output > output2
“sed”是一个查找和替换正则表达式的命令,例如用逗号替换制表符。如果您想了解sed可以做的更多事情,请在命令行中键入“mansed”
完整命令如下所示:
yum -C check-update 2>/dev/null | awk 'f;/$^/{f=1}' | sed 's/\t+/,/g'
通过设置OFS,可以更改输出字段分隔符。要触发要重新格式化的输出,您必须分配给其中一个字段或
$0
;如果不修改任何内容,习惯用法是将行分配给自身:
awk -v OFS=, 'f { $0 = $0; print; }
/^$/ { f = 1 }'
将现有命令修改为-
yum -C check-update 2>/dev/null | awk '{$1=$1}f;/$^/{f=1}' OFS=','
这只是一个强迫awk重新计算{$1=$1}
$1的值
将输出字段分隔符设置为OFS
,
yum -C check-update 2>/dev/null | awk 'NR>3{$1=$1;print}' OFS=,
我可以发誓我试着把它放在
f代码>但是我好像错过了。使用yum-C check update 2>/dev/null | awk'{OFS=“,”}{$1=$1}f/$^/{f=1}'
现在。谢谢$1=$1
重新计算整行$0
,而不仅仅是第一个字段$1