2016-07-06 127 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