2014-02-13 19 views
1

我一直使用从another stackoverflow post的“B”例如,返回模式匹配后的所有行(空行 - $ ^),但不包括比赛直到EOF。第一个例子是用于引用的未过滤输出(包括“加载支持...”之后的空行),第二个是当前使用awk输出的内容。用awk打印后的所有行正则表达式,改变输出域

[[email protected] ~]# 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 

[[email protected] ~]# 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'

回答

1

修改现有的命令 -

yum -C check-update 2>/dev/null | awk '{$1=$1}f;/$^/{f=1}' OFS=',' 
  • {$1=$1}这只是一个awk成语力量awk来重新计算的$1
  • OFS的 值将所述输出字段分隔符设置为,
+1

可能已经发誓我试着把它放在'f;'的前面,但似乎我错过了它。使用'yum -C check-update 2>/dev/null | awk'{OFS =“,”} {$ 1 = $ 1} f;/$ ^/{f = 1}''现在。谢谢! – crashmaxed

+1

'$ 1 = $ 1'重新计算整行'$ 0',而不仅仅是第一个字段'$ 1' – Jotne

0
sed 's/\t+/,/g' output > output2 

“的sed”是查找和替换正则表达式的表达式,如命令带有逗号的选项卡。如果您想了解更多sed可以做的事情,请在命令行输入“man sed”。

完整的命令如下:

yum -C check-update 2>/dev/null | awk 'f;/$^/{f=1}' | sed 's/\t+/,/g' 
0

可以通过设置OFS改变输出字段分隔符。要触发输出重新格式化,您必须将其分配给其中一个字段或$0;如果你不进行任何修改,成语是行分配给自己:

awk -v OFS=, 'f { $0 = $0; print; } 
       /^$/ { f = 1 }' 
0

这个脚本会更加直截了当,如果百胜输出保持相同的格式。

yum -C check-update 2>/dev/null | awk 'NR>3{$1=$1;print}' OFS=,