Как отсортировать поток данных по двум именам столбцов (номер столбца может отличаться)?

Я получаю поток данных из API, который выглядит так:

redID blueID whiteID 1 22 2 44 15 41 2 15 15 31 2 14 

То, что мне нужно сделать, – это отсортировать это по blueID а затем whiteID а затем отправить в другое место. Но я заранее не знаю, сколько будет столбцов. Все, что я точно знаю, это то, что всегда будут по крайней мере те две колонки.
Таким образом, желаемый результат будет выглядеть так:

 redID blueID whiteID 31 2 14 2 15 15 44 15 41 1 22 2 

Есть ли способ, возможно, в awk , отсортировать этот поток на основе имени столбца?
Единственный ответ, который я ищу, – это форма:

 inputStream | some operations | sortedInputStream 

Есть идеи?

2 Solutions collect form web for “Как отсортировать поток данных по двум именам столбцов (номер столбца может отличаться)?”

Вы могли бы сделать что-то вроде:

  # get the header line from the file and split each header to a different line header=$(head -1 $file_name | tr ' ' '\n') # get the index/line number of the blueID blueID_index=$(echo "$header" | grep -n "blueID" | sed 's/:.*//') # same for whiteID whiteID_index=$(echo "$header" | grep -n "whiteID" | sed 's/:.*//') # now build the sort command with the indexes you just computed sort -k$blueID_index -k$whileID_index 

Благодаря идеям из комментариев и других источников я наконец смог написать этот код и ответить на мой собственный вопрос:

  inputStream | awk -F'\t' -v OFS="\t" '{ if ( col1 == ""){ for (i=1;i<=NF;i++){ if ($i == "BlueId"){ col1=i; } else if ($i == "WhiteId"){ col2=i; } } print "-1" "\t" "-1" "\t" $0 } else { print $col1 "\t" $col2 "\t" $0 } }' | sort -k1,1n -k2,2n | cut -f3- | outputStream 

Он работает следующим образом: он принимает данные потока, находит номера нужных столбцов и выводит перед каждой строкой оба значения, необходимые для сортировки. Затем он сортирует 1-й и 2-й столбцы и удаляет их. Благодаря!

  • Сортировка вывода awk за исключением первой строки?
  • Считайте уникальные строки только для заданного шаблона
  • Как сортировать по двум полям чисел
  • Как сопоставить 2 больших файла и распечатать разницу в сценарии оболочки
  • Как я могу сортировать файл .txt по двум столбцам?
  • Переупорядочение файла на основе второго файла
  • Сортировка .csv файла по алфавиту не работает правильно, когда есть дефис
  • Сортировка файлов css по свойству цвета
  • Сортировка ведет себя странно при сортировке с учетом регистра
  • Чтение каталога в сценарии оболочки
  • Сортировка вывода find -exec ls
  • Interesting Posts

    bc выводит двоичный код, как куски, разделенные пробелами

    dpkg-deb build игнорирует / неверно истолковывает журнал изменений

    как получить доступ к данным на RAID10 (состоящий из 2 дисков), используя только 1 диск?

    Разделить XML-файл на несколько файлов

    Упаковка только определенного подмножества встроенных файлов

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

    Настройка сервера LAMP для личного развития

    Почему apt-get удаляет только несколько kB?

    Изменить размер плитки в Gnome 3

    Поиск текста в файлах, имеющих определенную папку в пути, а затем отображение соответствующих строк и разрешений файлов

    Запустить сценарий в действии «Безопасное удаление» в KDE

    chowning каждый домашний пользователь себе рекурсивно

    Установка pari-gp без выгрузки пакетов X-сервера

    Как завершить работу с consolekit без sysvinit (но с systemd)

    Используйте вложенный var для замены var

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