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