awk - 显示文件名

时间:2016-07-06 18:59:56

标签: linux shell awk

我正在尝试添加到我的文件中的命令: 当前输入文件的名称+逗号数量少于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

3 个答案:

答案 0 :(得分: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的{​​{1}}部分:

printf

答案 1 :(得分:2)

对于字符串,请在=IF(LEFT(A1;4)="http";CONCATENATE("=HYPER"; "LINK")&"(A1;Link)";IF(A1="";"";A1)) 中使用%s格式:

printf

答案 2 :(得分:2)

FILENAME是awk中的内置变量,它始终设置为正在读取的当前文件的名称。变量的类型是string(在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