我正在尝试执行一个添加到我的文件中的命令:当前输入文件的名称+行的索引,其中逗号数小于5+行的逗号数。
我得到了:
awk -F"," '{ if(NF > 5) printf("Filename: %d Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
产出如下:
Filename: 0 Index: 68520 Number of commas : 6
索引和逗号似乎工作正常,但是文件名呢?我做错了什么?
应该是:
Filename: dscabc.txt Index: 68520 Number of commas : 6
Filename: dscabc1.txt Index: 123 Number of commas : 6
发布于 2016-07-06 11:03:40
FILENAME
是一个字符串,而不是数字。使用%s
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字符串。
发布于 2016-07-06 11:03:50
对于字符串,请使用%s
格式的printf
awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
发布于 2016-07-06 11:13:59
文件名是awk中的一个内置变量,它总是设置为正在读取的当前文件的名称。变量的类型是字符串(用c中以空结尾的char数组表示)。
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
来正确地将其解释为字符串。修改后的命令应该类似于:
awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
https://stackoverflow.com/questions/38231808
复制相似问题