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
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]}"
awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
?_
mezőelválasztóként? Tegyen némi erőfeszítést