2017-01-21 8 views

Antwort

4

Nein, am besten Sie tun können, ist entweder ein Shell-Variable exportieren und dann setzen FS aus, dass, zum Beispiel:

$ cat tst.awk 
BEGIN { FS=ENVIRON["AWK_FS"] } 
{ print NF } 

$ export AWK_FS="," 
$ echo 'a,b,c' | awk -f tst.awk 
3 

oder er gibt eine Datei, die die FS setzt:

$ cat setFS.awk 
BEGIN{ FS="," } 

$ cat tst.awk 
@include "setFS.awk" 
{ print NF } 

$ echo 'a,b,c' | awk -f tst.awk 
3 

Die " @include "Konstrukt ist gawk-spezifisch, siehe https://www.gnu.org/software/gawk/manual/gawk.html#Include-Files. Sie müssen immer noch denselben Code in jedes Skript einfügen, um diese Datei einzuschließen, aber zumindest die tatsächliche FS-Einstellung (und OFS und was immer Sie sonst tun) wird nur einmal in dieser enthaltenen Datei angegeben.

+1

Ich benutze selbst die "@ include" -Lösung, einschließlich eines 'default.awk' im' ~/awk'-Verzeichnis (in dem ich Code habe, um 'FS' basierend auf Zeichenfrequenzen der üblichen Verdächtigen automatisch zu erkennen). Sie können AWKPATH =/home/user/awk exportieren. –

+0

'++', ich dachte eigentlich daran, seine _NOT_ möglich zurück in den Tag zu kommentieren. Eine knappe Flucht! : D – Inian

+1

@JamesBrown Beachten Sie, dass '@include" setFS.awk "' länger ist als 'BEGIN {FS =", "}', aus denen wir immer noch Leerzeichen entfernen können. '@ include' ist spezifisch für GNU Awk. – Kaz

Verwandte Themen