Hogyan bonthatok fel egy sort, amely aláhúzást tartalmaz az awk-val?

Megvan ez a sor, de szeretném, ha minden része elválna, és azt akarom, hogy ezt az elválasztást awk-vel végezzük.

A az eredeti sor a következő:

3302491505_8139829707_13970101.csv 

és amit kimenetként szeretnék:

8139829707 

vagy ez:

3302491505 

megjegyzések

  • ezt szeretné: awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • nem Csak egyet akarok kinyomtatni: 8139829707 vagy 3302491505
  • mi a probléma az 1. mező nyomtatásával a _ mezőelválasztóként? Tegyen némi erőfeszítést

Válasz

Ez kivágással történhet:

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

Válasz

Próbálja ki:

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

-F mezőelválasztót _ vagy . értékre állítja. Lehetővé teszi a $1 és $2 mezők beállítását.

Megjegyzések

  • ez kinyomtatja az egész sort

Válasz

Ez minden részt külön-külön nyomtat

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

Csak a kívánt mezőt használja.

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

Válasz

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

Ez elválasztja _ vagy ., majd nyomtassa ki a kívánt mezőt. Csak nyomtassa ki

  • $1 az első mezőhöz: 3302491505
  • $2 a 2. mezőhöz: 8139829707
  • $3 a 3. mezőhöz: 13970101

Válasz

A Bourne-szerű héjak beépített módon tagolják a húrokat. Ez történik, ha egy paraméterbővítést nem tesz megjegyzésként, és annyi hiba forrása van, amikor nem akarja, hogy ez megtörténjen.

Tehát csak akkor tűnik igazságosnak a használata, ha valójában szükséges.

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" 

Egyes héjak kevésbé nehézkes módon oszthatják meg a karakterláncokat.

zsh:

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

Vagy közvetlenül:

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük