[英]awk grouping and spliting multiple delimiters
我正在尝试在多个定界符上分割一行,并将输出分组为可以重新排序的单个元素。 我在运行pkg_info命令的BSD系统上。 输出看起来像这样。
yaesu-0.13nb1 Control interface for Yaesu FT-890 HF transceiver
skk-jisyo-cdb-201212 Dictionary collection for SKK
dbskkd-cdb-2.00nb1 SKK dictionary server based on cdb
libchewing-0.2.7 The intelligent phonetic input method library
skk-jisyo-201212 Dictionary collection for SKK
autoconf-2.69nb2 Generates automatic source code configuration scripts
pkg-config-0.28 System for managing library compile/link flags
python27-2.7.5 Interpreted, interactive, object-oriented programming language
软件包名称始终包含字母和数字,版本号是该名称所附的最后一个条目,并且说明始终至少用一个空格分隔。 最复杂的示例是,“ skk-jisyo-cdb”是程序包名称。 版本为“ 201212”,说明为“ SKK词典集合”。
我需要将版本与软件包名称分开,保留软件包名称的原样,并在其中留下“-”,同时从此处拆分版本信息,并使其成为一个独立的元素。 最后,我需要使描述保持原样,作为第三个要素。
我认为awk或sed都可以做到这一点,但还不能正确地对元素进行分组。 任何帮助深表感谢!
到目前为止,我尝试了一些操作:
pkg_info -a | awk -F'[[:space:]]*' '{print $1}' | awk -F- '{$NF=" "$NF;sub(/ /,"-")}1'
输出:
yaesu- 0.13nb1
skk-jisyo cdb 201212
dbskkd-cdb 2.00nb1
libchewing- 0.2.7
skk-jisyo 201212
autoconf- 2.69nb2
pkg-config 0.28
python27- 2.7.5
和
pkg_info -a | awk 'BEGIN{FS="-| ";OFS="\t"}{print $1$2}'
输出:
yaesu0.13nb1
skkjisyo
dbskkdcdb
libchewing0.2.7
skkjisyo
autoconf2.69nb2
pkgconfig
python272.7.5
我已经能够使用2个命令分离出软件包名称和版本,但这不是我想要/需要的。 这些仅供参考。 这将使我自己获得版本:
pkg_info -a | awk -F'[[:space:]]*' '{print $1}' | awk -F- '{print $NF }'
这将使我自己获得软件包名称:
pkg_info -a | awk -F'[[:space:]]*' '{print $1}' | sed 's/\(.*\)\(-.*\)/\1/g'
我需要的最终输出是$pkgname\\t$version\\t$description\\n
这将由一个\\t
制表符分隔。最复杂的示例输出为: skk-jisyo-cdb\\t201212\\tDictionary collection for SKK\\n
您没有提供足够的细节来确定,但这可能就是您想要的:
$ sed -r 's/([^[:blank:]]+)-([^[:blank:]]+)[[:blank:]]+/\1\t\2\t/' file
yaesu 0.13nb1 Control interface for Yaesu FT-890 HF transceiver
skk-jisyo-cdb 201212 Dictionary collection for SKK
dbskkd-cdb 2.00nb1 SKK dictionary server based on cdb
libchewing 0.2.7 The intelligent phonetic input method library
skk-jisyo 201212 Dictionary collection for SKK
autoconf 2.69nb2 Generates automatic source code configuration scripts
pkg-config 0.28 System for managing library compile/link flags
python27 2.7.5 Interpreted, interactive, object-oriented programming language
。
$ awk -v OFS='\t' '{ pkg=ver=$1; sub(/-[^-]+$/,"",pkg); sub(/.*-/,"",ver); sub(/[^[:space:]]+[[:space:]]+/,""); print pkg, ver, $0}' file
yaesu 0.13nb1 Control interface for Yaesu FT-890 HF transceiver
skk-jisyo-cdb 201212 Dictionary collection for SKK
dbskkd-cdb 2.00nb1 SKK dictionary server based on cdb
libchewing 0.2.7 The intelligent phonetic input method library
skk-jisyo 201212 Dictionary collection for SKK
autoconf 2.69nb2 Generates automatic source code configuration scripts
pkg-config 0.28 System for managing library compile/link flags
python27 2.7.5 Interpreted, interactive, object-oriented programming language
将分隔符从tab
更改为所需的任何内容。
您可以在字段1上使用默认字段分隔符和split函数。然后,只需将字段分隔符和split的最后一项附加到第一个字段:
awk '{n=split($1, a, "-"); $1=$1 FS a[n]}1'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.