¿Cómo puedo dividir una línea que contiene un subrayado con awk?

Tengo esta línea, pero quiero que cada parte de ella se separe y quiero que esta separación se haga con awk.

El La línea original es la siguiente:

3302491505_8139829707_13970101.csv 

y lo que quiero como salida es:

8139829707 

o esto:

3302491505 

Comentarios

  • ¿Es esto lo que quieres? awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • no, quiero imprimir solo uno de ellos: 8139829707 o 3302491505
  • ¿Cuál es el problema de imprimir el primer campo usando _ como separador de campo? Haz un esfuerzo

Responder

Esto se puede hacer con cut:

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707 

Respuesta

Prueba esto:

awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv" 

-F establece el separador de campo en _ o .. Permite configurar los campos $1 y $2.

Comentarios

  • esto imprime la línea completa

Respuesta

Esto imprime todas las partes individualmente

$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv 

Simplemente use el campo que desee.

$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101 

Respuesta

echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}" 

Esto se separa por _ o . y luego imprima el campo que necesite Simplemente imprima

  • $1 para el primer campo: 3302491505
  • $2 para el segundo campo: 8139829707
  • $3 para el tercer campo: 13970101

Respuesta

Los shells tipo Bourne tienen una forma incorporada de dividir cadenas. Eso es lo que sucede cuando dejas una expansión de parámetros sin comillas y la fuente de tantos errores cuando no quieres que eso suceda.

Por lo tanto, parecería justo usarlo cuando realmente es necesario.

IFS=_ # split on _ set -o noglob # leaving a parameter expansion unquoted also # involves filename generation which we don"t want here var=3302491505_8139829707_13970101.csv set -- $var # $var unquoted means its split printf "%s: %s\n" First "$1" Second "$2" Third "$3" 

Algunas shells tienen formas menos engorrosas de dividir cadenas.

En zsh:

var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}") 

O directamente:

printf "%s\n" "Second part: ${${(s:_:)var}[2]}" 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *