Como imprimir todas as linhas que é a primeira palavra é a primeira palavra de um arquivo?

0

Eu tenho um arquivo de texto sort.txt , que tem conteúdo parecido com isto:

2 Jack
2 Naomi
2 Tina
1 John
1 Tyler

Eu quero imprimir todas as linhas que começam com 2 , mas o problema é que o número nem sempre é 2 , pode ser qualquer número. Eu só quero imprimir todas as linhas que a primeira palavra é a mesma da primeira linha. Portanto, se a primeira palavra foi 3 , imprima todas as linhas que começam com 3 . Eu tentei fazer isso, mas não funcionou:

firstWord=awk '{print $1;}'
egrep "^$firstWord" sort.txt
    
por ash 31.10.2018 / 18:49

2 respostas

2

É bem trivial com awk . Obtenha a primeira palavra da primeira linha em uma variável e, em seguida, para as linhas subsequentes, use essa variável para corresponder à primeira palavra e imprima apenas essas linhas

awk 'NR == 1 { fw = $1 } $1 == fw' sort.txt

A construção NR == 1 obtém apenas a primeira linha do arquivo de entrada e não há limitadores de limite especiais definidos em cada linha (desalinhamento de espaço em branco), o primeiro campo é acessado por $1 e armazenado em %código%. A condição posterior fw avalia cada linha e retorna true somente se a condição for satisfeita, imprimindo assim a linha.

    
por 31.10.2018 / 18:54
0

Usando o awk:

awk 'NR == 1 { word=$1 } { if (match($0, "^"word) > 0) print }' < sort.txt

Na primeira linha NR == 1 , atribua o valor "word" para ser a primeira palavra da linha.

Em qualquer linha, se a linha corresponder à variável word no início da linha, imprima-a.

    
por 31.10.2018 / 18:54