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

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

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

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

  • Печатать строки, в которых первое поле имеет только четыре символа, используя регулярное выражение в awk?
  • Найдите шаблон и вставьте # в начале 2 строки до этого и 1 строку после этого
  • Назначение в фигурных скобках и внешних фигурных скобках в awk
  • Удалить столбец из CSV
  • как конкатенировать следующую строку, когда условие истинно awk
  • Как суммировать массив чисел bash (некоторые в научной нотации)?
  • Теперь, я хочу получить номер поля для Flag10, результат должен быть: 10

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

  • Присоединиться: два файла - но только добавить последние два столбца
  • Как использовать команду awk для вычисления разницы дат между двумя столбцами в одном файле?
  • Извлечь начальное и конечное положение общего идентификатора
  • рассчитать числа на конец и слить в одну строку
  • Что делает этот awk-скрипт
  • sed, чтобы заменить строку из одного файла на все содержимое другого файла
  • 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 - лучшая ОС в мире.