Я хочу напечатать второй последний столбец или поле в awk. Количество полей является переменным. Я знаю, что я должен быть в состоянии использовать, $NF
но не уверен, как это можно использовать.
И это, похоже, не работает
awk ' { print ( $NF-- ) } '
NF
последний индекс поля,$NF
это значение последнего поляОтветы:
Должно сработать
источник
awk -F '.' '{print $(NF-2)}'
$(..)
вызывает команду в подоболочке в зависимости от того, какую оболочку вы используете. Вы можете обойти это, используя$ (NF-1)
вместо$(NF-1)
.Небольшое дополнение к принятому ответу Криса Каннона: печатать, только если на самом деле есть второй последний столбец.
источник
Это самое простое:
Причина, по которой оригинал
$NF--
не сработал, заключается в том, что выражение вычисляется перед декрементом, тогда как декремент моего префикса выполняется перед вычислением.источник
int x = ++i
int x = i++
, Префикс означает сначала увеличение; Постфикс означает увеличение позже (назначение сначала).источник
Вы были недалеко от результата! Это делает это:
Это уменьшает количество полей в одном, так что
$NF
содержит первое предпоследнее.Тест
Давайте сгенерируем несколько чисел и напечатаем их по группам из 5:
Давайте напечатаем предпоследний на каждой строке:
источник
Perl-решение, похожее на awk-решение Криса Каннона:
Эти параметры командной строки используются:
n
цикл вокруг каждой строки входного файла, не печатать автоматически каждую строкуl
удаляет символы новой строки перед обработкой и добавляет их обратно послеa
Режим автоматического разделения - разбить входные строки в@F
массив. По умолчанию расщепление по пробеламe
выполнить код Perl@F
Массив AutoSplit начинается с индекса [0] в то время как поля AWK начать с $ 1.$#F
это количество элементов в@F
источник
$F[-2]
Вы пытались начать справа налево с помощью команды rev? В этом случае вам просто нужно напечатать 2-й столбец:
источник
Сначала уменьшает значение, а затем печатает его -
ИЛИ
источник
Если у вас много столбцов и вы хотите напечатать все, кроме трех, в последнем случае, то это может помочь
awk '{ $NF="";$(NF-1)="";$(NF-2)="" ; print $0 }'
источник