определение номера столбца с использованием строки в 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 one-liner в автономный скрипт?
  • Как печатать из разделителя полей ":" до конца строки?
  • Почему печать работает с awk, но с эхом нет?
  • Сравните два текстовых файла и найдите соответствующие строки
  • Вырезать файл, ограниченный числом с одной или несколькими цифрами
  • Плитка logfile на куски и поиск ошибок
  • Преобразование GB в TB в скрипт
  • Попытка использовать awk для создания ls show non-directories
  • AWK-скрипт для сравнения содержимого 2-х файлов
  • awk - читать программу И ввод со стандартного ввода?
  • Есть ли альтернатива grep -A -B -C-переключателям (для печати нескольких строк до и после)?
  • Узнать, сколько программ я не установил из списка с помощью grep / awk в archlinux
  • Interesting Posts

    Как заставить bash прервать выполнение скрипта при синтаксической ошибке?

    Объединение, сортировка и удаление дубликатов в многочисленных файлах gzip

    данные восстановления из RAID и сбоя диска (Linux)

    Как настроить XFCE для обработки быстрых клавиш \ hotkeys на key-release \ вверх, а не нажатия клавиш

    Определение ключевых последовательностей в Evil-mode Emacs

    Как сортировать смешанные тексты и цифры (например, имена хостов)?

    В каком каталоге хранятся сценарии, которые запускаются с новыми установками ядра?

    Почему мой супервизор не запускается при перезагрузке?

    Как использовать определенную функцию с xargs

    Игнорировать специальные символы в сравнении с сценарием оболочки

    В чем разница между POSIX и bash и другими сценариями оболочки?

    В чем разница между Unix, Linux, BSD и GNU?

    curl, wget ничего не возвращают

    TFTP-сервер не прослушивает порт

    Не удается установить inkscape на Ubuntu?

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