2015-12-08 2 views
-1

У меня есть входной файл которого образец:AWK и новой строки после последней колонке

8101010447 25.09 40n50.76 15e06.74 4.96 999 ----- 0.2388 314 6.90 99.00 60 6 81EV00001 
8101010929 23.85 42n47.96 12e47.90 8.90 3.0 MCSTI 0.0917 123 0.60 2.80 47 16 81EV00002 
8101011100 14.41 40n52.23 15e20.57 7.34 999 ----- 0.7021 123 0.40 1.30 67 11 81EV00003 

и мне нужно, чтобы получить последние и четвертый столбцы. Я использую awk для правильного ввода столбцов, но последний столбец имеет символ новой строки в конце, поэтому столбцы выводятся на отдельные строки.

Мой код выглядит следующим образом:

awk -F' ' '{print $14, $4}' catalog.txt >> bbb.txt 

Любые идеи о том, как я могу это сделать?

Конечный результат должен выглядеть следующим образом:

81EV00001 15e06.74 
81EV00002 12e47.99 
81EV00003 15e20.57 
+1

Вероятно, 'awk '{print $ NF, $ 4}' file' хватает, так как' -F '' 'по умолчанию и' $ NF' соответствует последнему полю. Однако неясно, как должен выглядеть вывод. Пожалуйста, отредактируйте, чтобы уточнить. – fedorqui

+0

Это должно быть 81EV00001 15e06.74 для первой линии. – user3540561

+0

Пожалуйста, предоставьте вывод, который вы получаете, предпочтительно с 'cat -vET'. –

ответ

2

Вы можете удалить CR символы перед печатью:

awk '{ sub("\r", "", $14); print $14, $4; }' catalog.txt >> bbb.txt 

sub() функция заменяет одну строку другой строкой; в этом случае я заменю символ \r в столбце 14 пустой строкой.

+0

Это работает. Можете ли вы объяснить, что вы сделали? Спасибо – user3540561

+0

Я добавил объяснение, хотя кажется, что это должно быть очевидно, если вы знаете, что делает функция 'sub()'. – Barmar

0

Вы можете попробовать эти подходы, чтобы получить поля (AWK) и удалить нежелательные символы (Tr):

Удаление CR:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\r' > bbb.txt 

Удаление LF:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d '\n' > bbb.txt 

Снятие и CR и LF:

awk -F' ' '{print $14, $4}' catalog.txt | tr -d "\r\n" > bbb.txt 
+0

Почему вы используете временный файл вместо того, чтобы прокладывать вывод через 'tr'? – Barmar

+0

Действительно, трубопровод - это более простой подход. Ред. –

Смежные вопросы