awk все строки во входном файле, последнее поле которых содержит хотя бы одну прописную букву

У меня есть некоторое реальное время с домашним заданием здесь. В качестве должной осмотрительности я просматривал веб-страницы в течение последних 2,30 часов и читал учебник по awk, чтобы найти решение, безнадежное. Вот строка, которую я придумал:

awk '/[A-Z]/ {print $NF}' ‹ tweedle.txt (Tweedle.txt — стихотворение)

текущий вывод:

Tweedledee
Tweedledee
battle;
Tweedledee
rattle.
crow,
tar-barrel;
so,
quarrel.

ожидаемый вывод – последние поля, начинающиеся с прописных букв.

Tweedledee
Tweedledee
Tweedledee

просто печатает последние поля как в верхнем, так и в нижнем регистре.

Нужен ваш опыт, ребята. заранее спасибо


person Zerg12    schedule 28.03.2013    source источник
comment
Пожалуйста, рассмотрите возможность редактирования вашего вопроса, чтобы включить образец ввода, ожидаемый вывод и ваш текущий вывод. Половина получения полезного решения заключается в том, чтобы дать осмысленное определение проблемы ;-).. Удачи!   -  person shellter    schedule 28.03.2013
comment
Есть еще идеи, ребята? команды, указанные Фаизом, спасибо ему, кстати, не работают должным образом   -  person Zerg12    schedule 28.03.2013


Ответы (3)


Как это:

 awk '$NF ~ /^[A-Z]/{print $NF}' tweedle.txt
person Guru    schedule 28.03.2013

Ну вот:

awk '$NF ~ /[A-Z]/' < tweedle.txt

Это гласит: принять все строки, чье поле NFth соответствует регулярному выражению /[A-Z]/. Действие Awk по умолчанию — просто напечатать строку, и я предполагаю, что вы хотите это сделать.

И если вы хотите напечатать только последнее поле (ваш вопрос не очень ясно) из всех строк, последнее поле которых содержит хотя бы один верхний регистр,

awk '$NF ~ /[A-Z]/ {print $NF}' < tweedle.txt

Кстати, вот как я это проверял:

faiz@strange-love:/tmp$ cat tweedle.txt 
a b aBoo
c D
a x y
G
j h g
faiz@strange-love:/tmp$ awk '$NF ~ /[A-Z]/ {print $NF}'  tweedle.txt 
aBoo
D
G
faiz@strange-love:/tmp$ awk '$NF ~ /[A-Z]/'  tweedle.txt 
a b aBoo
c D
G

Предоставление чего-то подобного действительно дало бы нам гораздо лучшее понимание вашей проблемы.

person Faiz    schedule 28.03.2013
comment
[root@serg1a ~]# awk '$NF ~/[A-Z]/' ‹ tweedle.txt Траляля и Траляля Траляля Дам и Траляля Согласились на битву; Ибо Труляля сказал, что Труляля испортил свою красивую новую погремушку. В это время слетела чудовищная ворона, Черная, как бочка смолы; Что так напугало обоих героев, Они совсем забыли свою ссору. - распечатывает все строки в файле - person Zerg12; 28.03.2013
comment
Извините, но вам нужно быть более ясным. В чем на самом деле ваша проблема, и не могли бы вы отредактировать свой вопрос, чтобы лучше описать ввод, вывод и точные команды, которые вы выполняете. Используйте вики-форматирование, чтобы сделать ваш вопрос максимально ясным. - person Faiz; 28.03.2013
comment
Вторая команда выводит все последние поля без учета условия верхнего регистра: [root@serg1a ~]# awk '$NF ~ /[A-Z]/ {print $NF}' ‹ tweedle.txt Tweedleee Tweedledee battle; Погремушка Твидли. ворона, дегтярная бочка; так, ссора. - person Zerg12; 28.03.2013
comment
Не вижу причин, по которым это не должно работать. Я обновил свой ответ, показав, как это работает для меня. - person Faiz; 28.03.2013

не видя ваш входной файл, есть много возможных решений:

awk '$NF~/^[A-Z]/ && $0=$NF' file

или (из вашего "текущего вывода" эта строка тоже работает):

awk '/[a-z]$/' file
person Kent    schedule 28.03.2013