我已經看到了這個問題的幾個變種,但沒有一個答案對我的特定場景有所幫助。如何防止在使用awk時出現新行
我想加載一些文件,添加一個文件名列。這工作正常,只有當我把文件名作爲第一列。如果我把文件名列放在最後(我想要的地方),它會在$ 0和剩下的打印之間創建一條新線,我無法停下來。
for f in "${FILE_LIST[@]}"
do
awk '{ print FILENAME,"\t",$0 } ' ${DEST_DIR_FILES}/$f > tmp ## this one works
awk '{ print $0,"\t",FILENAME } ' ${DEST_DIR_FILES}/$f > tmp ## this one does not work
mv tmp ${DEST_DIR_FILES}/$f
done > output
示例數據:
- 我開始與此:
A B C
aaaa bbbb cccc
1111 2222 3333
- 我想這(與文件名新列):
A B C FILENAME
aaaa bbbb cccc FILENAME
1111 2222 3333 FILENAME
- 我收到了這個(\ t和新文件名):
A B C
FILENAME
aaaa bbbb cccc
FILENAME
1111 2222 3333
FILENAME
獎金問題 我使用一個變量來傳遞文件名,但它是把整個路徑。什麼是最好的方式只打印文件名(沒有路徑)〜或者 - 使用保存路徑的變量去掉文件路徑?
PERFECT !!!這是CRLF,所以在轉換它之後就起作用了。這是我第一次嘗試awk,所以我從來不會想到我自己。 – xine78
+1。但是,如上所示的外部'basename'方法的問題是,只有當你在文件所在的目錄中時纔有效。我只是'awk'{fname = FILENAME;子(/.*\//, 「」,FNAME);打印fname}'/ tmp/foo'。 –