Aquí está mi archivo.test.csv
bonjour|b|french;deutsch|french
hello|h|english;russian|french
gutentag|g|german;polish|french
ciao|i|italian|french
Me gustaría probar si el tercero se divide por | es francés (el francés puede estar en otra división, por lo que solo es la tercera) y coloque todas las líneas que coincidan con esto en otro archivo.
ejemplo :
bonjour|b|french;deutsch|french
french;deutsch
Igualalo
Algo comoawk -F | '$3=="french"' file
Respuesta1
awk -F '[|;]' '$3 == "french"' file >newfile
Esto utiliza ambos |
y ;
como delimitadores de campo y realiza una comparación de cadenas entre el tercer campo y la cadena french
. Si la cadena coincide, se genera la línea. Cualquier salida se redirige al archivo newfile
.
Si usasolo |
como delimitador, tendrías que probar con una expresión regular al inicio del tercer campo:
awk -F '|' '$3 ~ /^french;/' file >newfile
Esto detecta la cadena french;
al comienzo del tercer campo y genera la línea si coincide.
Si french
puede ocurrir en cualquier parte del tercer |
campo delimitado (por ejemplo, como dutch;french
), entonces es posible que desees relajar un poco ese patrón y usarlo.
awk -F '|' '$3 ~ /french/' file >newfile
grep
Sería un poco incómodo usarlo aquí ya que es más difícil especificar exactamente |
en qué campo delimitado debe coincidir:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}french;' file >newfile
Esto coincide con una cadena de caracteres alfabéticos (letras) seguida de un |
carácter, dos veces, y luego la cadena french;
.
Con una expresión regular extendida:
grep -E '^([[:alpha:]]+\|){2}french;' file >newfile
|
Tenga en cuenta que es necesario escapar el ahora para que no se interprete como una alternancia.
Nuevamente, si french
puede aparecer en cualquier lugar dentro del tercer campo, necesitarás relajar un poco la expresión:
grep '^\([[:alpha:]]\{1,\}|\)\{2\}[^|]*french' file >newfile
o,
grep -E '^([[:alpha:]]+\|){2}[^|]*french' file >newfile
Inserté [^|]*
, que coincide con cualquier tramo de |
caracteres que no sean antes de la palabra french
(por ejemplo, la cadena dutch;
), y eliminé el ;
al final de la palabra (o podrías haberlo reemplazado ;
por [;|]
).