2016-07-06 125 views
2

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

我:

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 

回答

3

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 A decimal number (the integer part). 

    %s  A character string. 
2

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

awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv 
2

文件名是一个内置awk,w中的变量它始终设置为正在读取的当前文件的名称。变量的类型是字符串(由c中的空终止字符数组表示)。

awk -F"," '{ if(NF > 5) printf("Filename: %d Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv 

在此命令你给“%d”作为格式说明关于“文件名”,提示AWK解释“文件名”为整数。您可以修改您的命令以使用%s,而不是将其解释为字符串正确。修改后的命令应该如下所示:

awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv