awk显示文件名两次(?!)

时间:2011-02-16 20:12:05

标签: awk

问候。

我的文件包含11个字段。每个文件都有特定含义。我的工作是列出每个文件名并将信息加载到数据库表中进行报告。

我的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)做一些奇怪的事情:它重复它(如右边的最后两个字段):

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,文件名永远不会显示。这里缺少什么?有什么想法吗?

感谢您的意见。

1 个答案:

答案 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。我的答案都会打印出来。