Использование awk для обработки файла сопоставления с динамическим числом столбцов

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

mapping.txt :

 80 001 002 81 011 012 013 014 82 021 022 ... 

input.txt :

 81 103823044 80 103823054 81 103823064 ... 

Желаемый output.txt :

 103823044|011| 103823044|012| 103823044|013| 103823044|014| 103823054|001| 103823054|002| 103823064|011| 103823064|012| 103823064|013| 103823064|014| 

Я сделал простое сопоставление, в котором номера столбцов исправлены, но я не уверен, как сопоставить динамическое число столбцов с желаемым результатом

  • Замените данные в столбце в файле данными в строке из другого файла
  • Другой вопрос awk (ward) - подстановка подстроки с несколькими ключами
  • Объединить столбец на основе 2-го столбца
  • Найти Максимум всех столбцов на основе отдельного первого столбца
  • Извлечь имена хостов из не хэшированных ssh known_hosts
  • Пакетное переименование файлов изображений по возрасту плюс дата добавления и переменная в имя файла
  • Исключение переменных gawk для команд оболочки
  • Добавление содержимого нескольких файлов с помощью awk
  • One Solution collect form web for “Использование awk для обработки файла сопоставления с динамическим числом столбцов”

    Вы можете попробовать следующее:

     awk 'NR == FNR { x[$1,$2] = $1; next; } { for (i in x) { if (x[i] == $1) { split(i,t,SUBSEP); for (z = 2; z <= NF; z++) { print t[2] "|" $z "|"; } } } }' input.txt mapping.txt 

    Первый блок выполняется при чтении файла input.txt . Это достигается условием NR == FNR которое true при чтении первого файла. В первом блоке мы создаем массив x с ключами из первого и второго столбцов и значений из первого столбца. Второй блок выполняется для файла mapping.txt из-за next в первом блоке. Во втором блоке мы проверяем каждую клавишу в массиве x если значение из столбца 1 существует как значение в массиве x , и если существует выделение второй части ключа с split и мы печатаем в цикле это значение и значения из второго столбца до последнего column ( NF – количество полей в текущей записи).

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