2014-02-13 26 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=,