Aqui está meu arquivotest.csv
bonjour|b|french;deutsch|french
hello|h|english;russian|french
gutentag|g|german;polish|french
ciao|i|italian|french
Gostaria de testar se a terceira divisão por | é francês (francês pode estar em outra divisão, então apenas a terceira) e coloque todas as linhas que correspondam a isso em outro arquivo.
exemplo :
bonjour|b|french;deutsch|french
french;deutsch
combine
Algo comoawk -F | '$3=="french"' file
Responder1
awk -F '[|;]' '$3 == "french"' file >newfile
Isso usa |
e ;
como delimitadores de campo e faz uma comparação de string entre o terceiro campo e a string french
. Se a string corresponder, a linha será exibida. Qualquer saída é redirecionada para o arquivo newfile
.
Se estiver usandoapenas |
como delimitador, você teria que testar com uma expressão regular no início do terceiro campo:
awk -F '|' '$3 ~ /^french;/' file >newfile
Isso detecta a string french;
no início do terceiro campo e gera a linha se ela corresponder.
Se french
puder ocorrer em qualquer lugar no terceiro |
campo delimitado (por exemplo, como dutch;french
), então você pode querer relaxar um pouco esse padrão e usar
awk -F '|' '$3 ~ /french/' file >newfile
grep
seria um pouco estranho de usar aqui, pois é mais difícil especificar exatamente em qual |
campo delimitado corresponder:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}french;' file >newfile
Isso corresponde a uma sequência de caracteres alfabéticos (letras) seguida por um |
caractere, duas vezes, e depois pela string french;
.
Com uma expressão regular estendida:
grep -E '^([[:alpha:]]+\|){2}french;' file >newfile
Observe que o |
now precisa ser escapado para não ser interpretado como uma alternância.
Novamente, se french
puder ocorrer em qualquer lugar dentro do terceiro campo, você precisará relaxar um pouco a expressão:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}[^|]*french' file >newfile
ou,
grep -E '^([[:alpha:]]+\|){2}[^|]*french' file >newfile
Eu inseri [^|]*
, que corresponde a qualquer trecho de não |
caracteres antes da palavra french
(por exemplo, a string dutch;
), e removi o ;
no final da palavra (ou você poderia ter substituído o ;
by [;|]
).