Ich habe diese Zeile, aber ich möchte, dass jeder Teil davon getrennt wird, und ich möchte, dass diese Trennung mit awk erfolgt.
Die Die ursprüngliche Zeile lautet wie folgt:
3302491505_8139829707_13970101.csv
und was ich als Ausgabe möchte, ist:
8139829707
oder dies:
3302491505
Kommentare
- Ist dies das, was Sie wollen:
awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
? - nein, ich möchte nur einen davon drucken: 8139829707 oder 3302491505
- Was ist das Problem beim Drucken des ersten Felds mit
_
als Feldtrennzeichen? Bemühen Sie sich
Antwort
Dies könnte mit cut erfolgen:
$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707
Antwort
Versuchen Sie Folgendes:
awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv"
-F
setzt das Feldtrennzeichen auf _
oder .
. Hier können die Felder $1
und $2
festgelegt werden.
Kommentare
- Hiermit wird die gesamte Zeile gedruckt.
Antwort
Hiermit werden alle Teile einzeln
gedruckt
$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv
Verwenden Sie einfach das gewünschte Feld.
$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101
Antwort
echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}"
Dies wird durch _
oder .
und drucken Sie dann das gewünschte Feld aus. Drucken Sie einfach
-
$1
für das erste Feld: 3302491505 -
$2
für das 2. Feld: 8139829707 -
$3
für das 3. Feld: 13970101
Antwort
Bourne-ähnliche Shells verfügen über eine integrierte Methode zum Teilen von Zeichenfolgen. Das passiert, wenn Sie eine Parametererweiterung nicht in Anführungszeichen setzen und die Ursache für so viele Fehler, wenn Sie nicht möchten, dass dies geschieht.
Es erscheint also nur fair, sie zu verwenden, wenn sie tatsächlich vorhanden ist erforderlich.
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"
Einige Shells bieten weniger umständliche Möglichkeiten zum Teilen von Zeichenfolgen.
In zsh
:
var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}")
Oder direkt:
printf "%s\n" "Second part: ${${(s:_:)var}[2]}"