Как я могу использовать awk
в следующей ситуации?
Я хочу объединить строки, начинающиеся с одного столбца. Только первый столбец сохраняется после соединения (в данном случае aaa
, www
, hhh
).
Файл может быть разделен пробелом или табуляцией.
Пример ввода:
aaa bbb ccc ddd NULL NULL NULL
aaa NULL NULL NULL NULL NULL NULL
aaa bbb ccc NULL NULL NULL NULL
www yyy hhh NULL NULL NULL NULL
hhh 111 333 yyy ooo hyy uuuioooy
hhh 111 333 yyy ooo hyy NULL
Желаемый вывод:
aaa bbb ccc ddd NULL NULL NULL NULL NULL NULL NULL NULL NULL bbb ccc NULL NULL NULL NULL
www yyy hhh NULL NULL NULL NULL
hhh 111 333 yyy ooo hyy uuuioooy 111 333 yyy ooo hyy NULL
Основанием для этого является то, что я хочу создать очень простую файловую базу данных, где первый столбец всегда является идентификатором сущности. Все строки на основе одного столбца идентификатора объединяются.
text-processing
sed
awk
крошечный
источник
источник
uuu
строка (на выходе)?Ответы:
Чтобы получить первые столбцы в каждой строке с помощью awk, вы можете сделать следующее:
Это ваши ключи для остальных строк. Таким образом, вы можете создать хеш-таблицу, используя первый столбец в качестве ключа и второй столбец строки в качестве значения:
Чтобы получить всю оставшуюся часть строки, начиная со столбца 2, вам нужно собрать все столбцы:
источник
Кто-то может ответить на awk или sed, но версия на Python проста и может быть полезна для вас.
источник
Это более интересное приложение coreutils, я подозреваю, что оно не очень эффективно с большим вводом, так как вызывает соединение для каждой строки во вводе.
Для повышения его эффективности может помочь сохранение
outfile
иtmp
виртуальный диск.редактировать
Или без временных файлов:
источник
А вот PERL с одним вкладышем:
источник