Ho questa riga, ma voglio che ogni sua parte sia separata e voglio che questa separazione sia fatta con awk.
Il la riga originale è la seguente:
3302491505_8139829707_13970101.csv
e quello che voglio come output è:
8139829707
o questo:
3302491505
Commenti
Rispondi
Questo potrebbe essere fatto con cut:
$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707
Risposta
Prova questo:
awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv"
-F
imposta il separatore di campo su _
o .
. Consente di impostare i campi $1
e $2
.
Commenti
- questo stampa lintera riga
Answer
Questo stampa tutte le parti individualmente
$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv
Usa semplicemente il campo che desideri.
$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101
Risposta
echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}"
Questo è separato da _
o .
e quindi stampa il campo di cui hai bisogno Stampa semplicemente
-
$1
per il primo campo: 3302491505 -
$2
per il secondo campo: 8139829707 -
$3
per il terzo campo: 13970101
Risposta
Le shell simili a Bourne hanno un modo integrato per dividere le stringhe. Questo è ciò che accade quando lasci unespansione di parametro non quotata e la fonte di così tanti bug quando non vuoi che ciò accada.
Quindi sembrerebbe giusto usarlo quando è effettivamente necessario.
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"
Alcune shell hanno modi meno scomodi per dividere le stringhe.
In zsh
:
var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}")
Oppure direttamente:
printf "%s\n" "Second part: ${${(s:_:)var}[2]}"
awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
?_
come separatore di campo? Fai un po di sforzo