Não é possível usar o loop while porque está demorando. Existe alguma maneira mais rápida de obter o arquivo final..no linux

Não é possível usar o loop while porque está demorando. Existe alguma maneira mais rápida de obter o arquivo final..no linux
cat file_1.txt

100 200 name

100 200

100 200

150 300

150 300

150 250

150 250

150 300 name


final file should be 

150 300

150 300

150 250

150 250

estou usando esse comando

cat file_1.txt | grep -v "name">file_2.txt; cat file_2.txt| while read line;do cat file_1.txt| grep "$line"| head -1|grep -v "name" ;done

mas os dados são muitos, não posso usar o loop while, está demorando muito tempo para usar o loop while. existe alguma outra maneira de fazer isso rápido, como usar "grep -vf file_1 file_2"algo assim, passando assim. por favor, me avise.

aqui estou usando a lógica de obter a linha superior do padrão encontrado, o padrão é cada linha de"file_1.txt"

Responder1

Parece-me que seu código está imprimindo todas as linhas de file_1.txt, a menos que (a) a linha contenha nameou (b) as duas primeiras colunas da linha sejam iguais à linha anterior que continha name. Nesse caso, tente:

$ awk '/name/{bad[$1,$2];next} !(($1,$2) in bad)' file_1.txt 
150 300
150 300
150 250
150 250

Como funciona

  • /name/{bad[$1,$2];next}

    Se a linha atual contiver name, adicionaremos uma entrada à matriz associativa badsob a chave das duas primeiras colunas. Em seguida, pulamos o restante dos comandos e pulamos para recomeçar a nextlinha.

  • !(($1,$2) in bad)

    Se as duas primeiras colunas da linha atual $1,$2foremnãoentre as chaves de bade imprima esta linha.

informação relacionada