Захват строки без учета escape-последовательности - PullRequest
1 голос
/ 09 марта 2011

В моем входном файле есть следующие записи:

0100000000010001000   1       GWSL7YE02GHT73, 
0010000000000000000   1       GWSL7YE02GU6GK, 
0000000000000000000   1       GWSL7YE02G5W2B, 
0010000000110000000   1       GWSL7YE02I364F, 
0000000000000000000   1       GWSL7YE02F4IOC, Escherichia_coli_O127:H6

Как мне перехватить только строку, у которой есть строка в конце, например, строка 5. Еще одна вещь, которую стоит отметить, это то, что в каждой строке естьдве escape-последовательности "\ t" "\ n".Так что в строках 1-5 не думайте, что после "," есть escape-символ "\ n", НО в действительности это "\ t" "\ n".У меня действительно был следующий код awk: awk '{if ($0~/[A-Z0-9_]$/) print$NF}', однако, это предполагает, что есть либо алфавиты, число undescore в конце.На самом деле имена могут заканчиваться любыми специальными символами. Я проверил, поэтому мне пришлось поставить знак подчеркивания "_".Так есть ли способ, отличный от этого?Могу ли я иметь что-то как awk '{if ($NF!~/an expression that maps ,\n\t/}'

Спасибо

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Просто найдите строки с полями больше 3

awk 'NF>3' ./infile

Подтверждение концепции

$ cat -A lastfield
0100000000010001000   1       GWSL7YE02GHT73,^I$
0010000000000000000   1       GWSL7YE02GU6GK,^I$
0000000000000000000   1       GWSL7YE02G5W2B,^I$
0010000000110000000   1       GWSL7YE02I364F,^I$
0000000000000000000   1       GWSL7YE02F4IOC,^IEscherichia_coli_O127:H6^I$

$ awk 'NF>3' lastfield
0000000000000000000   1       GWSL7YE02F4IOC,   Escherichia_coli_O127:H6
0 голосов
/ 09 марта 2011

Вы также можете попробовать

awk -F, 'NF>1' file
...