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