LINUX.ORG.RU

Bash. Вставка столбца в таблицу

 ,


1

1

Задание: Создать сценарий, решающий задачу вставки столбца в текстовую таблицу. Например, команда ls -l печатает подобную таблицу и нужно вставить в неe заданный в файле столбец в заданную позицию.

С языком мало знаком. Вчера пытался целый день что-то написать, но не получалось. Были идеи транспонировать таблицу и добавить строку в определенную позицию, а также по отдельности добавлять столбцы вместе с новым вот так: awk '{for(i=1; i<4; i++) {print $i}}' text.txt; но оно тоже не работает так как надо


пытался целый день что-то написать, но не получилось

Не верю. Было б так, что-нибудь да написали бы, а значит и показали бы.

С языком мало знаком.

Так познакомьтесь. Язык же предельно простой. Исчерпывающее прилагаемое руководство (которое (info "bash")) — меньше 500 кб.

awk

Так вам АВК или Баш?

ls -l печатает подобную таблицу и нужно вставить в неe заданный в файле столбец в заданную позицию

Это вы сами про ls -l придумали или в задачнике так написано? Просто там и по-умолчанию не вполне таблица, так его же еще и менять можно.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)

И еще вы определитесь, что делать, когда количество строк в исходной таблице и новом столбце разное.

Ладно, держите пока самый простой вариант: без сохранения форматирования.

#!/bin/bash

file_newcol="$1"
place_after="$2"

while read -ra cols && read -u 3 -r newcol; do
    printf '%s\t' \
           "${cols[@]:0:$place_after}" \
           "$newcol" \
           "${cols[@]:$place_after}"
    printf '\n'
done 3< "$file_newcol"
Zmicier ★★★★★
()
Ответ на: комментарий от iljuase

Зачем такое делать на bash?

А почему бы и нет?

делай на нормальныом языке программирования

Чем это вам ГНУ Баш не угодил?

Zmicier ★★★★★
()

Простой способ (слолбец в конце):

paste <(ls -l) secondfile
Сложный способ (любой столбец):
ls -l | awk '{ getline l < "secondfile"; $3=$3" "l; print $0}'

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Ответ на: комментарий от legolegs

Спасибо, Ваш способ с awk очень помог. А можно как-нибудь сделать форматирование по столбцам, чтобы они ровно были расположены относительно друг друга?

gvcx19
() автор топика
Ответ на: комментарий от gvcx19

Оно портит имена файлов с пробелами.

На самом деле вам, возможно, лучше использовать вместо ls -l это

stat --printf='%A\t%h\t%U\t%G\t%s\t%y\t%n\n

так больше контроля и можно выкинуть лишние столбцы, а главное - табуляция гораздо реже пробелов используется в именах файлов.

legolegs ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.