簡體   English   中英

使用awk在正則表達式之后打印所有行,並更改輸出字段分隔符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM