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

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

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

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

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

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

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 
  • Как напечатать следующий n-й столбец в текущей строке после соответствия шаблону?
  • Присоедините линию рисунка и последовательные непустые строки, разделенные запятыми и заключенные в ()
  • Как вставить содержимое файла в строку в bash
  • Удалять конечные пробелы только из первого поля
  • Печать нескольких строк после n-го появления в bash
  • Замена всех ненулевых результатов на «1» для формирования присутствия / отсутствия
  • awk: напечатать одну строку на поле-1 значение (отличное), где разница «поле-2 - поле-3» минимально
  • Усечение точности даты
  • Если значение попадает в диапазон, напечатайте сумму значений
  • Заменить значения в файле
  • Как использовать regex как разделитель полей в awk?
  • Объедините вывод из df -h / dev / xvda1 в одну строку
  • Interesting Posts

    Переместить огромное количество файлов в строгий каталог упорядоченных каталогов

    Как использовать ARM как сервер LTSP?

    Как вы переходите на вторичный интерфейс на одном физическом порту?

    Получить имя устройства подключенного USB-диска

    Загрузка .epub из .acsm

    CentOS, как обновить версию Ant до 1.8.x и выше?

    Как искать рекурсивно в нескольких уровнях встроенных tar tgz-файлов?

    Скрипт Perl работает отлично в интерактивной оболочке, но не как задание cron

    Загрузите с помощью rsync через bastion / jumper без изменений .ssh / config

    Ввернул файл lightdm.conf, что теперь?

    Найти файлы, содержащие строку в имени файла и другую строку в файле?

    Как использовать скрипт bash для чтения содержимого двоичного файла?

    Добавить репозиторий Ubuntu в Debian

    start-stop-daemon всегда возвращает «0», хотя процесс не выполняется

    Есть ли хороший способ установить локальные переменные среды каталога / проекта?

    Linux и Unix - лучшая ОС в мире.