Ich habe ein awk-Skript und habe eine CSV-Datei an dieses übergeben.
awk -f script.awk /home/abc/imp/asgd.csv
Was ich tue, ist, FILENAME innerhalb zu erhalten script.awk
. FILENAME gibt mir den ganzen Weg. Da ich in awk bin, kann ich nicht verwenden basename FILENAME
.
print FILENAME;
/home/abc/imp/asgd.csv
Ich habe es innerhalb versucht script.awk
echo $FILENAME | awk -F"/" '{print $NF}'
aber ich kann das nicht innerhalb ausführen script.awk
. Wie komme ich asgd.csv
in ein awk-Programm?
n = split(FILENAME, a, "/"); basename=a[n];
. Nicht verwenden,sub
da dies dieFILENAME
Variable tatsächlich ändert (was für die Funktion kein Problem darstellt, da awk call by value verwendet).Versuchen Sie dieses awk Einzeiler,
quelle
awk 'END{ var=FILENAME; n=split (var,a,/\//); print a[n]}' /home/abc/imp/asgd.csv
Am besten exportieren Sie es aus der Eingabe-CSV oder direkt aus dem Eingabedateipfad. Sie können es umkehren, dann 1 Spalte abrufen und dann erneut umkehren.
oder einfach
quelle
Verwenden Sie die Split-Funktion von Awk
Eine Möglichkeit, dies zu tun, ist die Verwendung der Split-Funktion. Beispielsweise:
Dies funktioniert sogar bei mehreren Dateien. Beispielsweise:
quelle
Auf den Systemen , in denen
basename
Befehl verfügbar ist, könnte man verwendenawk
‚s -system()
Funktion oderexpression | getline var
Struktur außerhalb ruftbasename
Befehl. Dies kann helfen, Eckfälle zu berücksichtigen, die in Stephanes Antwort erwähnt wurden .quelle