Извлеките только имя пакета без версии с помощью awk или sed

cat pkg.temp
ca-certificates-2017.2.14-65.0.1.el6_9.noarch
glusterfs-3.7.9-12.el6.x86_64
glusterfs-api-3.7.9-12.el6.x86_64
glusterfs-api-devel-3.7.9-12.el6.x86_64
glusterfs-client-xlators-3.7.9-12.el6.x86_64

Вот файл, я хочу вывод как:

PkgName                        Version
ca-certificates                2017.2.14-65.0.1.el6_9.noarch
glusterfs                      3.7.9-12.el6.x86_64
glusterfs-api-devel            3.7.9-12.el6.x86_64
glusterfs-client-xlators       3.7.9-12.el6.x86_64

Таким образом, я получаю нежелательный дефис в последнем:

$ awk -F'[[:digit:]]' '{ print $1}'
ca-certificates-
glusterfs-
glusterfs-api-
glusterfs-api-devel-
glusterfs-client-xlators-

В то время как печать привычки за 2$ отображает мою версию также

awk -F'[[:digit:]]' '{ print $2}' /tmp/Version-pkgs

.
.
.
.
.
.
0
задан 27 November 2018 в 13:13

1 ответ

Если Вы уверены, что комбинация разделителя "-" сопровождается цифрой, можно использовать sed для замены того тире пространством. Вы можете канал это через awk, чтобы сделать некоторую отформатированную печать. Что-то вроде этого:

sed -e 's/-\([0-9]\)/ \1/' _file_ | awk 'BEGIN {printf("%-30s %s\n", "PkgName", "Version")} {printf("%-30s %s\n", $1, $2)}'

Надеюсь, это поможет.

2
ответ дан 27 October 2019 в 01:26

Другие вопросы по тегам:

Похожие вопросы: