Wie kann ich eine Zeile, die eine Unterstreichung enthält, mit awk teilen?

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]}" 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.