Awk显示文件名两次(?)

Awk显示文件名两次(?),awk,Awk,你好 我的文件名中包含11个字段。每个文件都有特定的含义。我的工作是列出每个文件名,并将信息加载到数据库表中进行报告 我的awk代码执行此操作(文件具有版本后缀): 它工作正常,只是它对文件名($0)做了一些奇怪的处理:它像这样重复(右起的最后两个字段): 如果我从printf语句中删除“%f”开关,它似乎可以工作,但如果我不使用它并删除$0,则永远不会显示文件名。我错过了什么?有什么想法吗 谢谢您的输入。awk没有打印两次,find是由于ls和-printf造成的。我看不出-exec ls'{

你好

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

我的awk代码执行此操作(文件具有版本后缀):

它工作正常,只是它对文件名($0)做了一些奇怪的处理:它像这样重复(右起的最后两个字段):

如果我从printf语句中删除“%f”开关,它似乎可以工作,但如果我不使用它并删除$0,则永远不会显示文件名。我错过了什么?有什么想法吗


谢谢您的输入。

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'

find-名称“*.VER”-printf“%f”| awk-f'~'{for(i=1;i
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'

find.-name“*.VER”-printf“%f”| awk-f'~'''''''{for(i=1;iI已删除”-printf%f\\t”并将$0替换为$filename。它现在可以工作,但在文件名前显示“/”。如何删除这两个前导字符?@Chris如果不需要
/
前缀,请查看我更新的代码。基本上,保留
-printf“%f”
$0
但是去掉
-exec ls'{}'';
它就像一个符咒。非常感谢!我修复了printf语句中的一个小问题:我改为“printf%f\\n”,否则输出在一行上。再次感谢。我删除了“-printf%f\\t”并用$filename替换$0。它现在可以工作,但显示“/”就在文件名之前。如何删除这两个前导字符?@Chris如果不需要
/
前缀,请查看我的更新代码。基本上,保留
-printf“%f”
$0
,但去掉
-exec ls'{}“”;”
它工作起来很有魅力。非常感谢!我修复了printf语句中的一个小故障:我改为“printf%f\\n”,否则输出在一行上。再次感谢。