Используйте функции от dash.el
и s.el
:
(defun print-columns (s &rest is)
(s-join "\n"
(--map (s-join ", "
(-select-by-indices is (cons it (s-split " " it t))))
(s-lines s))))
(print-columns "a b c\n1 2 3" 3 2 1 0) ; output:
;; c, b, a, a b c
;; 3, 2, 1, 1 2 3
По умолчанию awk обрабатывает текст как последовательность записей (разделенных новой строкой), причем каждая запись представляет собой последовательность полей (разделенных пробелом). Таким образом, в приведенном выше примере c
является полем записи a b c
. Функция print-columns
получает текст, отделяется новыми строками с помощью s-lines
, выбирает определенные поля из каждой записи, объединяет их запятой с помощью s-join
, объединяет результат с переводы строк. Наиболее важной функцией является dash
-select-by-indices
, которая выбирает элементы из списка по их индексам и возвращает в том же порядке, что и список индексов:
(-select-by-indices '(2 1 0) '(a b c d e)) ; => (c b a)