将命令输出中的列合并到单行中

将命令输出中的列合并到单行中

我用来dnf list installed列出所有已安装的软件包,它返回以下输出:

zenity.x86_64                                                                         3.22.0-1.fc25                                                               @@commandline          
zip.x86_64                                                                            3.0-16.fc24                                                                 @@commandline          
zlib.i686                                                                             1.2.8-10.fc24                                                               @@commandline          
zlib.x86_64                                                                           1.2.8-10.fc24                                                               @@commandline          
zlib-devel.x86_64                                                                     1.2.8-10.fc24                                                               @@commandline          
znc.x86_64                                                                            1.6.5-1.fc25                                                                @@commandline 

我只对包的名称感兴趣,即第一列的值,但仅直到.(例如znc.x86_64-> znc)。

如何将此命令输出的结果合并到以空格分隔的单行中(例如zip zlib zlib-devel znc)?

答案1

awk+种类解决方案:

dnf list installed | awk -F. -v ORS="\0" '{print $1" "}' | sort -zu && echo ""

输出应如下所示:

zenity zip zlib zlib-devel znc

-v ORS="\0"- 将输入视为零终止记录

sort -zu- 要得到独特的零终止值

相关内容