Como posso dividir uma linha que contém um sublinhado com awk?

Eu tenho esta linha, mas quero cada parte dela separada e quero que essa separação seja feita com o awk.

O a linha original é a seguinte:

3302491505_8139829707_13970101.csv 

e o que desejo como saída é:

8139829707 

ou este:

3302491505 

Comentários

  • É isso que você deseja: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • não, quero imprimir apenas um deles: 8139829707 ou 3302491505
  • qual é o problema de imprimir o primeiro campo usando _ como separador de campo? Faça algum esforço

Resposta

Isso pode ser feito com cut:

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

Resposta

Tente isto:

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

-F define o separador de campo para _ ou .. Permite definir os campos $1 e $2.

Comentários

  • isso imprime toda a linha

Resposta

Isso imprime todas as partes individualmente

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

Basta usar o campo que você deseja.

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

Resposta

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

ISSO é separado por _ ou . e, em seguida, imprima o campo necessário Basta imprimir

  • $1 para o primeiro campo: 3302491505
  • $2 para o 2º campo: 8139829707
  • $3 para o 3º campo: 13970101

Resposta

Os shells do tipo Bourne possuem uma maneira integrada de dividir strings. Isso é o que acontece quando você deixa uma expansão de parâmetro sem citação e a fonte de tantos bugs quando você não quer que isso aconteça.

Portanto, seria justo usá-la quando na verdade necessário.

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" 

Alguns shells têm maneiras menos complicadas de dividir strings.

Em zsh:

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

Ou diretamente:

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *