определение номера столбца с использованием строки в awk

Предположим, у меня есть файл, разделенный на канал:

|Sr|Fruits|Colors| |1 |apple |red| |2 |orange |orange |3 |grapes |purple| 

Здесь очевидно, что awk что $2 – Fruits, а $3 – столбец цветов.

В будущем, если порядок столбцов изменится, можно ли определить номер столбца с помощью строки?

Т.е. Цвета составляют $3 а фрукты$2 ?

4 Solutions collect form web for “определение номера столбца с использованием строки в awk”

Можешь попробовать:

 $ awk -F'|' ' { for(i=1;i<=NF;i++) { if($i == "Fruits") printf("Column %d is Fruits\n", i-1) if($i == "Colors") printf("Column %d is Colors\n", i-1) } exit 0 } ' file Column 2 is Fruits Column 3 is Colors 

Обратите внимание, что фактическая колонка для Fruits and Colors $3 и $4 .

Список всех заголовков столбцов:

 awk 'BEGIN{ FS="|" } { for(fn=1;fn<=NF;fn++) {print fn" = "$fn;}; exit; } ' file 

Вывод:

 $1 = $2 = Sr $3 = Fruits $4 = Colors $5 = 

Используя текст метки, напечатайте выбранные вами кол-во в выбранном вами порядке:

 awk 'BEGIN{ FS="|" } NR==1 { split(columns, c) for(fn=1;fn<=NF;fn++) hdr[$fn]=fn; next; } { printf( FS ); for (text in c) printf( "%s", $hdr[c[text]]FS ); print "" } ' columns="Colors|Fruits" file 

Вывод:

 |red|apple | |orange|orange | |purple|grapes | 

Возможно, лучше напечатать все столбцы, присутствующие в первой строке, чтобы проверить не только эти два поля, но также определить новые столбцы, их имена, изменения порядка и т. Д.

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

вывод:

 1 2 Sr 3 Fruits 4 Colors 5 

Это кажется немного неуклюжим, но я всегда нахожу номера столбцов, используя следующую строку кода:

 head -1 file | sed 's/*delimiter*/\n/g' | nl 

Здесь я беру строку заголовка файла и передаю его в sed, заменяя разделитель на \ n. В результате каждый заголовок столбца теперь находится в новой строке. Наконец, я связываю это с nl, который добавляет номера строк, которые соответствуют номерам исходных столбцов.

  • Awk и отбрасывание несовпадающих токенов в строке?
  • Использование Grep -o или Sed / Awk для захвата фрагмента из середины строки
  • Печать значения столбца в следующей строке
  • Извлечь линии между двумя шаблонами
  • отображать пользователей, которые вошли в систему с даты, используя последние
  • Объединение двух таблиц, включая многократное появление идентификаторов столбцов
  • Преобразование генотипов в 0/1
  • как добавить описание в нижнем колонтитуле
  • Удалить повторяющиеся поля в данном столбце
  • Перенаправление вывода печати на многократные файлы в awk
  • Как найти все соответствия регулярному выражению в строке
  • Interesting Posts

    пользователи не могут выполнить su для другого пользователя LDAP

    numfsbufs и mount / remount файловых систем

    Поиск последнего элемента в строке с использованием grep

    Проблемы с загрузкой Kali Linux 1.0.9a 64 бит на Macbook Pro

    В Debian, как восстановить / usr / share / doc?

    Может ли systemd выполнить некоторую настройку перед разветвлением в качестве пользователя?

    У меня установлено несколько дистрибутивов Linux, но можно только внести изменения в GRUB из одного из них. Как я могу это исправить?

    Настройка нескольких статических IP-адресов для образа диска

    Имеет ли параметр порядок значение с tar?

    Сделайте строки в Libreoffice, которые выделяются после нажатия

    Как очистить / tmp?

    Подождите, пока поток stdout завершится, а затем добавьте его содержимое в файл

    Как отключить DHCP (статический IP-адрес)?

    ssh говорит: Вы не существуете, уходите!

    ноутбук с плохим монитором превратился в сервер: как отключить монитор

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