Отображение количества столбцов и элементов в столбцах с использованием цикла for

diff -u <(ls dir1) <(ls dir2)

Это гарантирует, что diffне заглядывает внутрь подкаталогов.

Или попробуйте это, если вы смелы;)

diff -u <(find dir1/ -maxdepth 1 -type d -exec basename {} \;) <(find dir2/ -maxdepth 1 -type d -exec basename {} \;)
0
06.05.2021, 16:49
1 ответ

Вам никогда не придется рассчитывать количество необходимых строк. Вам просто нужно убедиться, что вы вставляете новые строки после каждого числа $cols.

Использование seqиawk:

$ num=28
$ cols=6
$ seq "$num" | awk -v cols="$cols" '{ printf "%-4d", $1 } NR % cols == 0 { printf "\n" } END { printf "\n" }'
1   2   3   4   5   6
7   8   9   10  11  12
13  14  15  16  17  18
19  20  21  22  23  24
25  26  27  28

Это печатает каждую цифру, считанную из seq, как выровненное по левому краю -десятичное число, допуская четыре символа ширины для каждого, без завершающей новой строки. Затем он выводит новую строку после каждого напечатанного ряда чисел и в самом конце.

Использование инструмента rs:

$ num=28
$ cols=6
$ seq "$num" | rs 0 "$cols"
1   2   3   4   5   6
7   8   9   10  11  12
13  14  15  16  17  18
19  20  21  22  23  24
25  26  27  28

Если вам нужно сделать это с помощью цикла оболочки, например,.bash:

$ num=28
$ cols=6
$ for ((i=1; i<=num; ++i)); do printf '%-4d' "$i"; (( i%cols == 0 )) && echo; done; echo
1   2   3   4   5   6
7   8   9   10  11  12
13  14  15  16  17  18
19  20  21  22  23  24
25  26  27  28

Это имитирует код awkв начале.

2
28.07.2021, 11:34

Теги

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