Saya memiliki skrip awk dan saya telah mengirimkan file CSV ke sana.
awk -f script.awk /home/abc/imp/asgd.csv
Apa yang saya lakukan adalah memasukkan FILENAME ke dalam script.awk
. FILENAME memberi saya seluruh jalur. Karena saya awk, saya tidak bisa menggunakan basename FILENAME
.
print FILENAME;
/home/abc/imp/asgd.csv
Saya sudah mencoba dengan ini di dalam script.awk
echo $FILENAME | awk -F"/" '{print $NF}'
tapi saya tidak bisa menjalankan ini di dalam script.awk
. Bagaimana saya bisa masuk asgd.csv
dalam program awk?
n = split(FILENAME, a, "/"); basename=a[n];
. Jangan gunakansub
karena itu akan benar-benar mengubahFILENAME
variabel (yang merupakan masalah dengan fungsi karena awk menggunakan panggilan berdasarkan nilai).Coba satu baris ini,
sumber
awk 'END{ var=FILENAME; n=split (var,a,/\//); print a[n]}' /home/abc/imp/asgd.csv
cara terbaik untuk mengekspornya dari input CSV atau langsung dari jalur file input Anda dapat membalikkannya, kemudian mendapatkan 1 kolom dan kemudian balikkan lagi.
atau sederhana
sumber
Gunakan Fungsi Split Awk
Salah satu cara untuk melakukan ini adalah dengan menggunakan fungsi split. Sebagai contoh:
Ini bahkan berfungsi pada banyak file. Sebagai contoh:
sumber
Pada sistem di mana
basename
perintah yang tersedia, salah satu bisa menggunakanawk
'ssystem()
fungsi atauexpression | getline var
struktur untuk memanggil eksternalbasename
perintah. Ini dapat membantu menghitung kasus sudut yang disebutkan dalam jawaban Stephane .sumber