簡體   English   中英

如何使用 Awk 顯示列中的文件名?

[英]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

從討論printfman 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM