Ось ще одне рішення bash (bash 4):
minlen=5 # minimum length of a line
mapfile -tO1 < inputfile # Map the file to the array MAPFILE (by default)
# Start the array at index 1
for i in "${!MAPFILE[@]}"; do
(( ${#MAPFILE[i]} > minlen )) || unset MAPFILE[i] # Remove shorter elements
done
Отриманий масив є рідким, тому індекси масиву зберігаються. Оскільки ми починали з 1, індекси - це рядки рядків, які ми зберігали. Ми можемо вивести саме такі номери рядків:
printf 'Long lines found at: '
printf '%d, ' "${!MAPFILE[@]}"
echo
Або ми можемо виводити самі рядки:
printf '%s\n' "${MAPFILE[@]}"
grep), або як номери рядків, або як щось інше (можливо, ви хочете застосувати до них ще одну дію)? Напевно, найзручніший спосіб зробити це залежить від того, що буде зроблено з цими рядками далі.