首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Awk显示列中的文件名?

如何使用Awk显示列中的文件名?
EN

Stack Overflow用户
提问于 2016-07-06 18:59:55
回答 3查看 1.3K关注 0票数 2

我正在尝试执行一个添加到我的文件中的命令:当前输入文件的名称+行的索引,其中逗号数小于5+行的逗号数。

我得到了:

代码语言:javascript
运行
复制
awk -F"," '{ if(NF > 5) printf("Filename: %d  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv

产出如下:

代码语言:javascript
运行
复制
Filename: 0  Index: 68520 Number of commas : 6

索引和逗号似乎工作正常,但是文件名呢?我做错了什么?

应该是:

代码语言:javascript
运行
复制
 Filename: dscabc.txt   Index: 68520 Number of commas : 6
 Filename: dscabc1.txt  Index: 123 Number of commas : 6
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-06 19:03:40

FILENAME是一个字符串,而不是数字。使用%s

代码语言:javascript
运行
复制
awk -F"," '{ if(NF > 5) printf("Filename: %s  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv

来自man awk中讨论printf的部分

%d,%i -十进制数(整数部分)。%s字符串。

票数 4
EN

Stack Overflow用户

发布于 2016-07-06 19:03:50

对于字符串,请使用%s格式的printf

代码语言:javascript
运行
复制
awk -F"," '{ if(NF > 5) printf("Filename: %s  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
票数 2
EN

Stack Overflow用户

发布于 2016-07-06 19:13:59

文件名是awk中的一个内置变量,它总是设置为正在读取的当前文件的名称。变量的类型是字符串(用c中以空结尾的char数组表示)。

代码语言:javascript
运行
复制
awk -F"," '{ if(NF > 5) printf("Filename: %d  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv

在这个命令中,您将'%d‘作为'FILENAME’的格式说明符,它提示awk将'FILENAME‘解释为一个整数。您可以修改命令以使用%s来正确地将其解释为字符串。修改后的命令应该类似于:

代码语言:javascript
运行
复制
awk -F"," '{ if(NF > 5) printf("Filename: %s  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38231808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档