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

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

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

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

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

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

  • Как создать список и подсчитать ключевые слова LaTeX в исходном файле?
  • AWK - изменение имени файла (специальные символы)
  • Regex awk для интерфейса Cisco
  • Как обрабатывать только те строки, которые содержат заданную строку?
  • Извлеките уникальную строку из каждой строки, содержащей <string>
  • Печатать порты с использованием приложения
  • Как я могу удалить все между двумя маркерами в файле?
  • Как заменить определенные строки?
  • 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 - лучшая ОС в мире.