How to display filename from a column using Awk?

后端 未结 3 1635
太阳男子
太阳男子 2021-01-22 12:22

I\'m trying to do a command which add to my file: Name of the current input file + Index of line where numbers of commas are less than 5 + numbers of commas across the line.

相关标签:
3条回答
  • 2021-01-22 12:54

    FILENAME is an builtin variable in awk, which is always set to name of current file being read. The type of variable is string (represented by null terminated char array in c).

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

    In this command you have given '%d' as the format specifier for 'FILENAME', which prompts awk to interpret 'FILENAME' as an integer. You can modify your command to use %s instead to interpret it as string correctly. The modified command should look something like:

    awk -F"," '{ if(NF > 5) printf("Filename: %s  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
    
    0 讨论(0)
  • 2021-01-22 13:02

    For strings, use %s format in printf:

    awk -F"," '{ if(NF > 5) printf("Filename: %s  Index: %d Number of commas : %d\n",FILENAME,NR, NF-1); }' dsc* >> filename.csv
    
    0 讨论(0)
  • 2021-01-22 13:09

    FILENAME is a string, not a number. Use %s:

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

    From the section of man awk that discusses printf:

      %d, %i  A decimal number (the integer part).
    
      %s      A character string.
    
    0 讨论(0)
提交回复
热议问题