Я охотился вокруг последние несколько дней для набора инструментов командной строки, в Perl или сценарий AWK, что позволит мне очень быстро перенести следующие данные:командной строки поворота
Row|Col|Val
1|A|foo
1|B|bar
1|C|I have a real
2|A|bad
2|C|hangover
в это :
A|B|C
foo|bar|I have a real
bad||hangover
Обратите внимание, что есть только одно значение в наборе данных для каждой «ячейки» (то есть, как и в таблице, нет никаких дубликатов Row «1» Col «а»)
Я пробовал разные awk, она ll для переноса данных, но не может заставить их работать. Одна из моих идей заключалась в том, чтобы вырезать каждое значение «Col» в отдельный файл, а затем использовать командную строку «join», чтобы объединить их вместе «Row», но ДОЛЖЕН быть более простым способом. Я уверен, что это просто невероятно просто, но я немного борюсь.
Мои входные файлы имеют Cols A-G (в основном, включая строки переменной длины) и 10 000 строк. Если я могу избежать загрузки всего в память, это было бы огромным плюсом.
Пиво по почте для всех, у кого есть ответ!
Как всегда - большое спасибо за вашу помощь.
Cheers,
Джош
P.S. - Я немного удивлен тем, что для выполнения этого очень простого типа операции поворота/транспонирования нет привычной командной строки. Я посмотрел на http://code.google.com/p/openpivot/ и на http://code.google.com/p/crush-tools/, оба из которых, похоже, требуют агрегатных вычислений.
ghoti - Святая корова, которая была быстрой! Кажется, я получаю синтаксические ошибки для следующих значений: значения [$ 1] [$ 2] = $ 3; и значения [row] [col]. Есть предположения? – Josh
Выяснил это .... Исправьте следующее: значения [$ 1, $ 2] и значения [row, col] – Josh
Используете ли вы awk или gawk? Если gawk, какая версия? Я не помню, когда добавлялись многомерные массивы, но это могло быть 3.1. Некоторые пакеты для Solaris или AIX или такие могут быть старше этого. Если вы используете FreeBSD, установите gawk из ports/lang/gawk. – ghoti