Aspas forçam uma comparação na representação de string dos seus números. Alfabeticamente, "42" vem depois de "120" (você tem "42" > "120"); numericamente não (você então tem 42 < 120).
Eu tenho uma tabela de entrada, parcialmente:
TCTTTTAAAGCCTCCTCAACTGTTTTAGGG 1 0
CACAACTGAAAAGTACAATGTGTTTGCTTC 1 0
CACCATATTTATTTAAAGGAGCATCTAAAT 1 3
ACGAGAAAAAAAAAAGGGGTGACCCCCTGG 3 0
CAAAATATTAATTCTTTACTATGAAACTTA 1 0
TTCTATTTTGTCGTGGTTAGCAACCATCAC 6 5
TAATAATAAAATAATGAAAAAGAAAAATCA 1 0
AAAGCATTTGAAGGTGACAAAAGGGAAAGT 20 7
TGCTAAGGAAGAATCATGGAAGAGTGTTTT 0 1
CTCCCTTCCTCGCAAACATGCTTGCCCAGG 0 1
AATAAAAATCAAATTTAGTGACGGGTTGAG 130 4
AGAACGAAGCTGATATAAAGACATCAAAGA 1 0
TGCCCCTAATGCAGCATCTCTCTCTCCCTC 1 0
CCACAAAATAATTACATGGCAAACACGAGT 1 0
Eu quero imprimir todas as linhas com coluna 3 > = 120 e coluna 2 > = 420
Eu tenho dois resultados diferentes usando e não usando "" ao redor do número.
(A) awk '$3>=120 && $2>=420 {print $0}'
(B) awk '$3>="120" && $2>="420" {print $0}'
Resultado de (A) parcialmente, o que parece ser o que eu quero:
GTGTCATTTCATGCCTCATTCATCCTCATT 1375 439
TGAATTCTATTACTTGATTGACATTGACAG 541 301
TCTTTGGCGGTTGTTAAAGAATTTTCTGAT 823 203
TCTACACCTCAATATGCAAAACATTACATC 535 165
TTCAACAAATTAATTAAAATTGAATTAAAC 3010 627
GATATGTAAAAAAAATTATATTATATGAAT 609 173
Resultado de (B) parcialmente, não é o que eu quero:
TAATAATAATAATAAAAGAAGAAGAAAAGA 5 2
TATCTGAGCTATCAACTCAATTCATCGTCG 5 4
TTAATGATAAATTTATCTTAAAAGTTTAAC 62 23
TTCAACCCCCTCTCCTGGTGTGTGCCCTAG 45 7
TCCAAAGCCTTTAATGTGTACCGCGTGAAA 6 5
GGCAATGGGATACTCCTGTATGTTATTCTA 6 3
A pergunta vem à minha mente: Como as aspas (") na seleção de números fizeram a diferença?
Muito obrigado.
Execute as comparações sem as aspas, ou elas serão comparações de sequência que são realizadas lexicograficamente.
O minúsculo script awk
pode ser ainda mais reduzido em tamanho, permitindo que a ação padrão seja executada. A ação padrão para um teste condicional que não possui um bloco {...}
é imprimir a linha de entrada atual:
awk '$2>=420 && $3>=120' data.in
Tags awk