Я знаю, как выбрать поле из строки, используя команду вырезать. Например, с учетом следующих данных:
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Эта команда:
cut -d, -f2 # returns the second field of the input line
Возвращает:
b
g
l
Мой вопрос: как выбрать второе поле отсчета с конца? В предыдущем примере результат будет:
d
i
n
Ответы:
Обратный ввод до и после
cut
сrev
:Выход:
источник
cut
нельзя принимать отрицательные индексы полей (как, например, Python).Попробуйте сделать это с помощью awk :
Или используя Perl :
Или используя ruby (спасибо manatwork):
Или используя
bash
(спасибо manatwork):Или используя python :
источник
bash
не нуждается в неподвижном количестве столбцов для этого:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
.perl
сruby
.ruby
добавил,bash
отредактировал.-
или (в зависимости от среды, оболочки или способа компиляции оболочки), может содержать символы обратной косой черты, тоecho
это не вариант. Зачем вам нужно мошенникcat
Enatefile.txt
с ничего перед подачей егоpython
!?. Тебе нужноread -A
а неread -a
вksh93
аzsh
. Отрицательные подписки работают вzsh
но только в последних версияхksh93
иbash
. В более старых версиях вы можете использовать${d: -2:1}
${d[@]: -2:1}
в виду в своем последнем предложении.Используя sed:
Выход:
объяснение
([^,]*,)*
соответствует любому количеству символов без запятой, за которыми следует запятая, т. е. любое количество столбцов.([^,]*)
соответствует столбцу.(,[^,]*){1}
соответствует одному столбцу в конце, если вы измените квантификатор{1}
на{2}
него, соответствует второму столбцу с конца и т. д.источник