Объединение строк как столбцов для создания таблицы в bash

Мне удалось решить проблему, очистив драйверы Nvidia :sudo apt-get purge nvidia*Это заставило систему автоматически переключиться на драйверы Nouveau. Затем я просмотрел диспетчер драйверов (в графическом интерфейсе системных настроек )и выбрал там новейший драйвер Nvidia. После того, как изменения были применены, я перезапустил X-сервер (Ctrl+Alt+Backspace ), и теперь все в порядке.

0
27.08.2019, 15:50
2 ответа

Вы можете использовать команду pasteи выполнить -замену:

table="$(paste -d ';' <(echo -e "$columnA") <(echo -e "$columnB") <(echo -e "$columnC"))"

echo "$table"выдаст вывод как:

A1;B1;C1
A2;B2;C2
A3;B3;C3

Также не забудьте использовать флаг -eс echo, иначе он не будет учитывать \n, тем более и вы получите вывод:

A1\nA2\nA3;B1\nB2\nB3;C1\nC2\nC3

Или используйте printf:

table="$(paste -d ';' <(printf "$columnA") <(printf "$columnB") <(printf "$columnC"))"
5
28.01.2020, 02:14

Использование GNU datamash, xargs,tr:

$ table=$(printf '%b\n' "$columnA" "$columnB" "$columnC" | xargs -n3\
    | datamash -t' ' transpose | tr ' ' ';')
$ table="${table//$'\n'/\\n}"
$ echo "$table"
A1;B1;C1\nA2;B2;C2\nA3;B3;C3
  • printf '%b\n'...печатать значения, разделенные символами новой строки
  • xargs -n3объединить три значения через пробел в строке
  • datamash -t' ' transposeтранспонировать вывод
  • tr ' ' ';'заменить пробелы точкой с запятой
  • ${table//$'\n'/\\n}заменить новые строки литералами\n
1
28.01.2020, 02:14

Теги

Похожие вопросы