[英]Using awk print all lines after a regular expression and change output field separator
我一直在使用另一個stackoverflow帖子中的“ b”示例來返回模式匹配(空行-$ ^)之后的所有行,直到EOF才包括該匹配。 第一個示例是未經過濾的輸出以供參考(包括“正在加載支持...”之后的空行),第二個示例是當前使用awk獲取的輸出。
[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'
將現有命令修改為-
yum -C check-update 2>/dev/null | awk '{$1=$1}f;/$^/{f=1}' OFS=','
{$1=$1}
這只是一個迫使awk重新計算$1
值的awk習語 OFS
會將輸出字段分隔符設置為,
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'
您可以通過設置OFS
更改輸出字段分隔符。 要重新格式化輸出,您必須將其分配給字段之一或$0
; 如果您不進行任何修改,則習慣用法是將行分配給自身:
awk -v OFS=, 'f { $0 = $0; print; }
/^$/ { f = 1 }'
如果yum輸出保持相同格式,則此腳本將更加簡單。
yum -C check-update 2>/dev/null | awk 'NR>3{$1=$1;print}' OFS=,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.