2011-02-16 26 views
0

問候。Awk顯示文件名兩次(?!)

我有文件名中包含十一個字段的文件。每個文件都有特定的含義。我的工作是列出每個文件名並將信息加載到數據庫表中進行報告。

我的awk代碼做這個(文件有VER後綴):

find . -name "*.VER" -exec ls '{}' ';' -printf %f\\t | awk -F"~" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$0}' > somefile.tab 

它工作正常,但它確實很奇怪的文件名($ 0):它重複它,像這樣(在最後2場從右側):

RRR1 PRE DTV_PREP PREP05 JGM15453. 26 P H23-600 029416589165 20110216 RRR1~PRE~DTV_PREP~PREP05~JGM15453.~26~P~H23-600~029416589165~20110216~090353.VER ./RRR1~PRE~DTV_PREP~PREP05~JGMDTV269~33~P~H21-200~029384120357~20110216~091829.VER 

如果我刪除從printf語句「%F」開關,它似乎工作,但如果我息事寧人,刪除了$ 0時,永遠不會被顯示的文件名。這裏錯過了什麼?有任何想法嗎?

感謝您的輸入。

回答

3

awk不打印出來兩次,find歸因於ls-printf。無論如何,我沒有看到-exec ls '{}' ';'的原因。你應該能夠簡單地像這樣將其刪除:

find . -name "*.VER" -printf "%f" | awk -F"~" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$11"\t"$0}' 

順便說一句,你可以大大簡化你的代碼,像這樣:

find . -name "*.VER" -printf "%f" | awk -F'~' '{for(i=1;i<=NF;i++)printf("%s\t",$i)}1' 

,你是在錯過了11場$11你的代碼。我的答案都會打印出來。

+0

我刪除了「-printf%f \\ t」,並用$ filename替換$ 0。它現在可用,但在文件名之前顯示「./」。如何刪除這兩個主角? – Chris 2011-02-16 20:19:41