Isso pode ser feito com recorte:
$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv"
8139829707
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
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
.
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
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 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]}"