Cum pot împărți o linie care conține un subliniat cu awk?

Am această linie, dar vreau ca fiecare parte a acesteia să fie separată și vreau ca această separare să se facă cu awk.

linia originală este următoarea:

3302491505_8139829707_13970101.csv 

și ceea ce vreau ca ieșire este:

8139829707 

sau asta:

3302491505 

Comentarii

  • Asta vrei: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nu Vreau să tipăresc doar unul dintre ele: 8139829707 sau 3302491505
  • care este problema tipăririi primului câmp folosind _ ca separator de câmp? Faceți ceva efort

Răspundeți

Acest lucru se poate face cu tăiere:

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

Răspuns

Încercați acest lucru:

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

-F setează separatorul de câmp la _ sau .. Permite setarea câmpurilor $1 și $2.

Comentarii

  • aceasta imprimă întreaga linie

Răspuns

Aceasta tipărește toate părțile individual

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

Folosiți câmpul dorit.

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

Răspundeți

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

ACEST lucru este separat de _ sau . și apoi imprimați câmpul de care aveți nevoie. Tipăriți

  • $1 pentru primul câmp: 3302491505
  • $2 pentru al doilea câmp: 8139829707
  • $3 pentru al 3-lea câmp: 13970101

Răspuns

Shell-urile Bourne au un mod încorporat de a împărți șirurile. Asta se întâmplă când lăsați un parametru extins necotat și sursa a atât de multe erori atunci când nu doriți ca acest lucru să se întâmple.

Deci, ar părea corect să-l utilizați atunci când este necesar.

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" 

Unele cochilii au modalități mai puțin greoaie de a împărți șirurile.

În zsh:

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

Sau direct:

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

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *