shell

awk überschreiben für etwas mehr Komfort

In der Befehlszeilen-Bash-Sprache auf Linux PC/Server stellt dieser Artikel vor, wie man awk überschreibt, um es etwas komfortabler zu machen. Ich habe zuvor einen Artikel über das Überschreiben des <code>cd</code>-Befehls geschrieben, und das war ziemlich praktisch in der Verwendung. Ich bin ein bisschen süchtig danach geworden, vorhandenen Linux- und Builtin-Befehlen Funktionen hinzuzufügen.…

Shou Arisaka
2 Min. Lesezeit
23. Nov. 2025

In der Befehlszeilen-Bash-Sprache auf Linux PC/Server stellt dieser Artikel vor, wie man awk überschreibt, um es etwas komfortabler zu machen.

awk ist praktisch, nicht wahr. Ich mag awk auch ziemlich, und verwende es oft. Ich habe mehrere awk-Artikel geschrieben.

(shell) awkチートシート [外部コマンド実行] Bash awkで全てのカラムを出力するには

Ich habe zuvor einen Artikel über das Überschreiben des cd-Befehls geschrieben, und das war ziemlich praktisch in der Verwendung. Ja, wirklich praktisch.

Bash cdコマンドでファイルを指定しても移動できるようにするだけ

Also bin ich ein bisschen süchtig danach geworden, vorhandenen Linux- und Builtin-Befehlen Funktionen hinzuzufügen.

Aber mit awk… ist die Syntax nicht irgendwie mühsam?

Ich möchte ziemlich oft die 2. Spalte oder die 3. Spalte ausgeben, aber jedes Mal awk '{print $2}' zu schreiben ist anstrengend, nicht wahr.

Wäre es nicht schön, wenn Sie das tun könnten:

$ echo 'hoge fuga' | awk '{print $2}'
fuga
$ echo 'hoge fuga' | awk 2
fuga

Also habe ich es geschrieben.

awk(){
    [[ "${1}" =~ ^[0-9]+$ ]] && /usr/bin/awk -v var="${1}" '{print $var}' || /usr/bin/awk "$@"
}

-v var="${1}" definiert es als Variable zur Verwendung in awk. Damit wird $2 zu $2. Streng genommen sollten Zeichenketten in awk in "" eingeschlossen werden, also hätte es vielleicht '{print "$"var}' sein sollen, aber da es keine Fehler gibt, ist es wahrscheinlich in Ordnung.

awk verwendet einfache Anführungszeichen, also funktioniert die Bash-Variablenerweiterung nicht. Also muss man einen Umweg mit der -v-Option nehmen.

[[ "${1}" =~ [0-9]+ ]] && /usr/bin/awk \'{print ${1}}\' || /usr/bin/awk "$@"  # => Fehler

[[ "${1}" =~ \d+ ]] && /usr/bin/awk '\''{print ${1}}'\'' || /usr/bin/awk "$@" # => Fehler

Aktualisierung

Aktualisierte Version.


awk(){

  : e.g. `# something | awk 2 `
  : e.g. `# something | awk nr2 `

  [[ "${1}" =~ ^[0-9]+$ ]] && { /usr/bin/awk -v var="${1}" '{print $var}' ; return 0 ; }
  [[ "${1}" =~ ^nr[0-9]+$ ]] && { /usr/bin/awk "NR==${1##+([a-z])}" ; return 0 ; }

  /usr/bin/awk "$@" && { return 0 ; }

}

NR und so weiter können mit doppelten Anführungszeichen funktionieren.

Diesen Artikel teilen

Shou Arisaka 23. Nov. 2025

🔗 Links kopieren