我希望整個原始文件的最後一列是文件名(不含路徑名)。這似乎很簡單,但每一次嘗試都未能實現。我的目標是將FLD0037變成FLD0 $ {ID}。awk basename作爲列變量
我曾嘗試以下:
cat FLD0037.txt | awk '{print $0, FILENAME;}' >FLD0037.test1.txt
test.1給出 - 在最後一欄。
cat FLD0037.txt | awk '{print $0, basename(FILENAME);}' >FLD0037.test2.txt
檢驗。2是一個空文件
cat FLD0037.txt | awk '{print $0, basename;}' >FLD0037.test3.txt
cat FLD0037.txt | awk -F"/" '{print $0, $NF;}' >FLD0037.test4.txt
cat FLD0037.txt | awk -F"/" '{print $NF;}' >FLD0037.test5.txt
cat FLD0037.txt | awk '{print basename $0;}' >FLD0037.test6.txt
test.3,test.5和test.6看起來像原來的文件,沒有寫在最後一欄。
test.4是在新列中複製數據的原始文件。
謝謝,
當您運行'cat FLD0037.txt | awk'{print $ 0,basename(FILENAME);}'> FLD0037.test2.txt'並注意到'test.2是一個空文件'你沒有注意到更重要和有用的錯誤信息'awk:cmd 。行:1:(FILENAME =文件FNR = 1)致命:函數'基名'未定義'或類似?不要在shell循環中這樣做,因爲awk完全能夠打開和關閉多個文件,並且它會比shell循環更有效,更健壯,更便攜。你有GNU awk嗎?如果有,是什麼版本?如果沒有 - 獲得gawk 4.0或更高版本。 –