Командная строка для перечисления номера строки записи, длина которой # 4 не равна 3 - PullRequest
1 голос
/ 08 марта 2012

Можно ли перечислить номер строки записей, длина поля № 4 которых не равна 3 в одной командной строке?

Допустим, у меня есть эти данные (разделитель табуляции)

John Smith  25  O   ATG 180
Peter Jackson   40  AB  GGTA    173
Carl Anderson   32  A   GGT 172
Michael Phillips    28  B   TT  165
Lisa Mount  30  B   GTAA    168

Данные в поле № 4: ATG, GGTA, GGT, TT, GTAA. Таким образом, вывод должен быть либо

2
4
5

или (NULL можно заменить на что угодно)

NULL 
2
4
NULL
5

Я предпочитаю первый вывод. Второй - на тот случай, если первый вывод сделать невозможно

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

Попробуйте это:

$ awk -F'\t' '{print $4}' input.txt | cat -n |
  grep -Ev '[[:space:]][CTAG][CTAG][CTAG]$' | 
  awk '{print $1}'
0 голосов
/ 08 марта 2012

Другое решение, но на Perl:

perl  -F'\t' -lane 'length($F[3])==3 or print $.' input.txt

Быстрое объяснение:

  • -a автоматически разбивает каждую строку ввода
  • -F (как и в awk-решении @ holygeek) позволяет определить шаблон разделения
  • результат разделения можно получить в массиве @F
  • $. - это переменная, содержащая текущую строкуномер входа
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...