Следующий сценарий должен выполнить то, что вам нужно:
#!/usr/local/bin/bash
input=./input
row=0
while read -r line; do
columns=( $line )
((row++))
max=0
min=${#line}
vmax=
vmin=
for column in "${columns[@]}"; do
((${#column}>max)) && max=${#column} && vmax=$column
((${#column}<min)) && min=${#column} && vmin=$column
done
echo "Row${row}: Min $min max $max $vmin $vmax"
done<"$input"
Учитывая этот ввод:
field0 field1 field2 field3 field4 field5 field6 field7 field8 field9
a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa aaaaaaaaaa
bbbbbbbbbb bbbbbbbbb bbbbbbbb bbbbbbb bbbbbb bbbbb bbbb bbb bb b
Будет получен этот результат:
$./script.sh
Row1: Min 6 max 6 field0 field0
Row2: Min 1 max 10 a aaaaaaaaaa
Row3: Min 1 max 10 b bbbbbbbbbb
Примечание. :Если в строке есть несколько полей одинаковой длины, которые в конечном итоге являются строкой минимальной/максимальной длины, будет выведено первое поле этой длины. (В примере строка ввода1 имеет все поля одинаковой длины, поэтому поле0 указано как минимальное, так и максимальное ).
Можно позволить fsck
это исправить, это относится к удаленному иноду — данные уже удалены, больше ничего удаляться не будет.