[英]How to display filename from a column using 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
FILENAME
是一個字符串,而不是一個數字。 使用%s
:
awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
從討論printf
的man awk
部分:
%d, %i A decimal number (the integer part). %s A character string.
對於字符串,在printf
使用%s
格式:
awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
FILENAME 是 awk 中的一個內置變量,它始終設置為正在讀取的當前文件的名稱。 變量的類型是字符串(在 c 中用空終止字符數組表示)。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.