file1, que contém uma única string por linha. Quero verificar se cada string existe na segunda coluna de file2. file2 contém duas strings separadas por espaços simples por linha, mas algumas linhas podem ter espaços iniciais antes da primeira coluna.
Quero usar apenas grep e/ou cut para executar a correspondência e gerar linhas correspondentes de file2 para newFile.txt, garantindo a correspondência de palavras inteiras (-w).
Eu tentei
grep -wF -f file1 file2 > newFile.txt
mas devido ao tamanho do arquivo o terminal roda infinitamente.
Eu também tentei
grep -wF -f <(cut -d ' ' -f 2 file2) | grep -wF -f - file2 > newFile.txt
Isso só funciona para algumas linhas no arquivo2 porque algumas linhas têm vários espaços antes das duas strings, embora essas strings sejam separadas apenas por um único espaço.
Arquivo1:
aaa
bbb
ccc
Arquivo2:
a aaa (should match)
b bbb (should match and does but the former spaces throws off cut -d, resulting in incomplete output of line in the newFile.txt)
c cc (should not match)
Pergunta: Como posso extrair e combinar eficientemente palavras inteiras na segunda coluna de file2.txt, enquanto lido com espaços iniciais inconsistentes? Prefiro usar grep e/ou cut, mas estou aberto a pequenas modificações.
Eu teria me inclinado a usar o awk, neste caso usei o comando paste. Acho que você pode usar algo como esta regex:
se entendi corretamente... Isso deve extrair linhas do arquivo2 onde a segunda coluna corresponde exatamente a uma das entradas do arquivo1, mesmo com espaços à esquerda
Pedir ajuda para fazer isso eficientemente com grep e cut é como pedir ajuda para construir uma cerca de jardim com um garfo de cozinha e um clipe de papel. Eles simplesmente não são as ferramentas certas para o trabalho e, portanto, não podem ser usados eficientemente para isso, nem podem ser usados de forma robusta (ou portátil) sem adicionar ainda mais ferramentas à mistura para ajudá-los. Uma solução somente awk, por outro lado, seria trivial, eficiente e portátil, por exemplo, o seguinte funcionará usando qualquer awk POSIX:
Resposta original antes de eu notar que o OP dizia "Quero verificar se cada string existe na segunda coluna do arquivo2. O arquivo2 contém duas strings separadas por espaços simples por linha" e pensava que eles queriam corresponder a todas as "palavras" no arquivo2:
Se você tiver mais caracteres do que apenas alfanuméricos e
_
que você considera parte de uma "palavra", então apenas altere[^[:alnum:]_]
para incluí-los, por exemplo, se uma "palavra" pode conter.
e-
então altere para[^[:alnum:]_.-]