Найти число FN с awk

У меня есть один документ, и этот документ содержит несколько столбцов, например:

,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13 

Если я использую awk, чтобы узнать общее количество полей, зная, что это символ разделителя , результат: 13

Теперь, я хочу получить номер поля для Flag10, результат должен быть: 10

Как я могу сделать это с помощью awk?

  • Как преобразовать данные с разделителями табуляции в данные с разделителями-запятыми?
  • Разделить файл на две строки перед шаблоном
  • Условное предложение if в awk
  • Получить строки с максимальными значениями в столбце с помощью awk, uniq и sort
  • добавление трех файлов CSV
  • Как проверить, отсутствует ли какой-либо повторяющийся текст в текстовом файле?
  • Как сделать поиск нескольких строк с использованием awk в unix?
  • Обнаружение общих строк в двух файлах с использованием 4 полей с использованием awk и UNIX
  • 3 Solutions collect form web for “Найти число FN с awk”

    Вы могли бы сделать, как показано ниже,

     awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}' file 

    Пример:

     $ echo ',Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13' | awk -F, '{for(i=1;i<=NF;i++)if($i=="Flag10")print i}' 10 

    Использовать awk builtin's:

     awk -F, -v field="Flag10" '{sub(field",.*",field);print split($0,any)}' doc.file 

    Сценарий удалит все после первого появления значения field (в данном случае Flag10 ), а затем распечатает результат разделения строки на запятую. Поскольку мы удалили все после Flag10 , это приведет к количеству оставшихся полей, которое является номером поля шаблона поиска.

    Обычно я создаю ассоциативный массив, сопоставляя имена заголовков с номерами столбцов

     awk -F, -v head="Flag10" ' FNR == 1 {for (i=1; i<=NF; i++) col[$i] = i} {print $col[head]} ' << END ,Flag2,,Flag4,Flag5,,,,,Flag10,Flag11,Flag12,Flag13 10,20,30,40,50,60,70,80,90,100,110,120,130 END 
     Flag10 100 
    Linux и Unix - лучшая ОС в мире.