2015-11-11 2 views
0

У меня есть табуляцией .txt файл в этом формате, содержащий многочисленные символы, цифры и буквы:Печать строки, если конкретный столбец содержит значения> 0

MUT 124 GET 288478 0 *  = 288478 0 
MUT 15 GET 514675 0 75MH = 514637 -113 
MUT 124 GET 514637 0 75MH = 514675 113 

Я хочу, чтобы идентифицировать все строки, содержащие > 0 в 9-м столбце (т. Е. Будет извлечена только 3-я строка выше), а затем распечатать столбец 4 + 9 из любых согласованных строк.

Желаемая выход (две вкладки колонки разграничены .txt файл):

514637 113 

Есть быстрый способ сделать это в терминале/в командной строке. Если да, то как?

Я только начал изучать awk и perl, поэтому все мои попытки до сих пор не были близки. Не уверен, с чего начать!

+1

Вы можете сделать это с AWK достаточно легко. Покажите некоторые из ваших попыток и объясните, как они потерпели неудачу. –

ответ

4

Легко в Perl

perl -lane 'print "$F[3]\t$F[8]" if $F[8] > 0' < input-file 
  • -l добавляет новую строку все печатаемого
  • -a разделяет вход в @F массив
  • -n обрабатывает входной построчно
3

Можно сделать с помощью Perl one-liner:

$ perl -anE 'say join "\t", @F[3,8] if $F[8] > 0' data.txt 
  • -n (не-autoprinting) - цикл по линии, чтение, но не печатает их
  • -a (автоматическое разделение) - разделить строку ввода, сохраненный в $_ в @F массив (пространство разделитель по умолчанию, измените его на -F, например. -F:)
  • -E 'CODE' (выполнить) - выполнить 'CODE' функцию, позволяющую узелок (как use 5.010) для вашей версии Perl

Смотрите perlrun для более.

1

awk обрабатывает его почти автоматически!

awk '$9>0 {print $4,$9}' file 

Если вам необходимо указать входной и выходной разделитель, скажем:

awk 'BEGIN{FS=OFS="\t"} $9>0 {print $4,$9}' file 
Смежные вопросы