Найдите максимальную длину символов в поле

Вдохновленный комментарием jordanm к ответу Bichoy, вот то, как можно иметь дело с именами файлов с пробелами в них:

count=50
i=1
while [ $i -le $count ]
do
    read filename
    tar --null -no-recursion -ruf abc.tar "$filename" --directory=/tmp/temp
    i=$(($i+1))
done <abc.txt

Я использовал a while цикл вместо выполнения for i in {1..50} чтобы позволить Вам мягкому коду количество требуемых строк.

3
08.03.2014, 23:43
3 ответа
[114645]Сначала вам нужно найти максимальную длину. Команда - это ваш разделитель полей, и вам нужно проигнорировать первую строку:

Теперь мы используем printf для расширения первого поля:

Обратите внимание, что одинарные кавычки заканчиваются до [115092] "$len"[115093], чтобы вставить длину поля, а затем они продолжаются.

EDIT (спасибо @dave_thompson_085 за более элегантное решение):

где последнее [115094]1[115095] означает true, а пустое действие означает [115096]{печать}[115097].[114654].

4
27.01.2020, 21:14
[114635] Если вы просто хотите добавить 0, если первый столбец - это один символ, то это сделает:

В строках, где второй символ - запятая, он предваряет 0.


ProxyPreserveHost On
ProxyPass / http://192.168.111.2/
ProxyPassReverse / http://192.168.111.2/
ServerName win.example.com

Если максимальная длина вашего первого столбца станет 3 вместо 2, то вы можете сделать так:

Или, если вы хотите сделать все это динамическим и добавить столько нулей, сколько необходимо, в зависимости от самого длинного значения в первом столбце, вы можете использовать это [115090]awk[115091]:То же самое, но расширить до нескольких строк для удобочитаемости, с комментариями:

2
27.01.2020, 21:14
awk '{if (length ($2)>max) max=length($2)} END {print max}' filename

Приведенная выше команда отображает длину самого длинного имени столбца (, т. е. $2=2-й столбец)

0
05.03.2021, 15:50

Теги

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