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

printfを論じman awkのセクションから:弦楽のため

%d, %i A decimal number (the integer part). 

    %s  A character string. 
2

printf%sの形式を使用します。

awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv 
2

FILENAMEは組み込みですawkの変数、w hichは常に読み込まれている現在のファイルの名前に設定されています。変数の型は文字列(cのヌル終端文字配列で表されます)です。このコマンドで

awk -F"," '{ if(NF > 5) printf("Filename: %d Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv 

あなたはawkは整数として「FILENAME」を解釈するように求められ「FILENAME」の書式指定、などは「%D」与えています。コマンドを変更して、代わりに%sを文字列として正しく解釈することができます。変更されたコマンドは、次のようになります。

awk -F"," '{ if(NF > 5) printf("Filename: %s Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv 
関連する問題