Come posso dividere una riga che contiene una sottolineatura con awk?

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

  • È questo quello che vuoi: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • no Voglio stamparne solo uno: 8139829707 o 3302491505
  • qual è il problema di stampare il primo campo utilizzando _ come separatore di campo? Fai un po di sforzo

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]}" 

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *