В языке высокого -уровня вы бы использовали массив массивов, но в bash их нет. Проблемы, предполагающие многоуровневые структуры данных, как эта, обычно очень утомительны для решения в оболочке.
Но поскольку ваша цель — изучить обработку текста в Unix, а не в Python, давайте решим ее в оболочке.
В этом решении мы читаем файл один раз, чтобы получить заголовки строк, а затем снова столько раз, сколько потребуется, чтобы собрать необходимое количество элементов. Мы сохраняем два массива:outrow
— это массив выходных строк, каждая из которых добавляется по мере продвижения; cursor
— это массив целых чисел, в котором хранится наше место в каждой строке.
Обратите внимание, что этот скрипт будет бесконечно зацикливаться, если для удовлетворения запроса недостаточно элементов. Решение этого остается в качестве упражнения для читателя.
#!/bin/bash
k=$1
input=input.txt
declare -a outrow
declare -a cursor
K=0
n=0
while read line
do
outrow[$n]=${line%% *}
cursor[$n]=1
(( n++ ))
done < $input
while [[ $K -lt $k ]]
do
n=0
while read line
do
declare -a col=( $line )
if [[ ${#col[@]} -gt ${cursor[$n]} ]]
then
outrow[$n]+=" ${col[ ${cursor[$n]} ]}"
(( cursor[$n]++ ))
(( K++ ))
[[ $K -lt $k ]] || break
fi
(( n++ ))
done < $input
done
for row in "${outrow[@]}"
do
echo "$row"
done
спасибо в cono
. Он помогает мне. У меня пока нет RAID:
# btrfs fi df /mnt
Data, RAID1: total=1.00GiB, used=768.00KiB
Data, single: total=1.00GiB, used=0.00B
System, RAID1: total=8.00MiB, used=16.00KiB
System, single: total=32.00MiB, used=0.00B
Metadata, RAID1: total=1.00GiB, used=112.00KiB
Metadata, single: total=1.00GiB, used=0.00B
GlobalReserve, single: total=16.00MiB, used=0.00B
Команда , предложенная в статье , работает некорректно
Поэтому он предложил мне сделать ребаланс вручную:
# btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt
Теперь все работает как положено:
# btrfs fi df /mnt
Data, RAID1: total=1.00GiB, used=512.00KiB
System, RAID1: total=32.00MiB, used=16.00KiB
Metadata, RAID1: total=1.00GiB, used=112.00KiB
GlobalReserve, single: total=16.00MiB, used=0.00B