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

0

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

A linha original é a seguinte:

3302491505_8139829707_13970101.csv

e o que eu quero como resultado é:

8139829707

ou isto:

3302491505
    
por MDVP 25.05.2018 / 10:02

5 respostas

0

Isso pode ser feito com recorte:

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 
8139829707
    
por 25.05.2018 / 10:39
0

Tente isto:

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

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

    
por 25.05.2018 / 10:08
0

Isto imprime todas as peças individualmente

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

Basta usar o campo desejado.

$ awk -F'[_.]' '{ print $3;}'  <<< "3302491505_8139829707_13970101.csv"
13970101
    
por 25.05.2018 / 10:22
0
echo -n "3302491505_8139829707_13970101.csv" | awk -F'[._]' '{print $1}'

Isso é separado por _ ou . e, em seguida, imprime o campo que você precisa Basta imprimir

  • $1 para o primeiro campo: 3302491505
  • $2 para o 2º campo: 8139829707
  • $3 para o 3º campo: 13970101
por 25.05.2018 / 10:08
0

Os shells semelhantes a Bourne possuem uma maneira interna de dividir strings. É o que acontece quando você deixa uma expansão de parâmetro sem aspas e a fonte de tantos erros quando não quer que isso aconteça.

Portanto, parece justo usá-lo quando for realmente 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"

Algumas conchas têm maneiras menos complicadas de dividir as 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]}"
    
por 25.05.2018 / 10:44