Jak mohu rozdělit řádek, který obsahuje podtržení s awk?

Mám tento řádek, ale chci, aby každá jeho část byla oddělena a chci, aby toto oddělení bylo provedeno pomocí awk.

původní řádek je následující:

3302491505_8139829707_13970101.csv 

a to, co chci jako výstup, je:

8139829707 

nebo toto:

3302491505 

Komentáře

  • Je to to, co chcete: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • ne Chci vytisknout pouze jednu z nich: 8139829707 nebo 3302491505
  • jaký je problém s tiskem 1. pole pomocí _ jako oddělovač polí? Vyvíjejte určité úsilí

Odpověď

Lze to provést řezem:

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

Odpověď

Zkuste toto:

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

-F nastaví oddělovač polí na _ nebo .. Umožňuje nastavit pole $1 a $2.

Komentáře

  • toto vytiskne celý řádek

odpověď

Tím se vytisknou všechny části jednotlivě

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

Stačí použít požadované pole.

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

Odpovědět

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

Toto je odděleno _ nebo . a poté vytiskněte kterékoli pole, které potřebujete, stačí vytisknout

  • $1 pro první pole: 3302491505
  • $2 pro 2. pole: 8139829707
  • $3 pro 3. pole: 13970101

Odpověď

Bourneovské mušle mají vestavěný způsob rozdělení řetězců. To se stane, když necháte expanzi parametrů necitovanou a zdrojem tolik chyb, když si nepřejete, aby se to stalo.

Takže by se zdálo být spravedlivé použít ji, když je potřeba.

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" 

Některé skořepiny mají méně těžkopádné způsoby rozdělení řetězců.

V zsh:

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

Nebo přímo:

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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *