История изменений
Исправление vodz, (текущая версия) :
Ну нате на bash, с однократным чтением входного файла, со стандартного ввода, длинна слов не важна:
#!/usr/bin/env bash
declare -a file line
declare -i lines line_number words max_words word pass
f_old=$- ; set -f
readarray -t file
lines=${#file[@]}
for((pass=0; pass<2; pass++)); do
for((line_number=0; line_number<lines; line_number++)); do
line=( ${file[line_number]} )
words=${#line[@]}
if [[ pass -eq 0 ]]; then
if [[ max_words -lt words ]]; then
max_words=words
commas=${line[@]/*/,}
commas=${commas// /}
fi
else
for((word=0; word<words; word++)); do
echo -n ${commas::word==0?max_words-words:1}"${line[word]}"
done
echo
fi
done
done
[[ $f_old != *f* ]] && set +f
Исправление vodz, :
Ну нате на bash, с однократным чтением входного файла, со стандартного ввода, длинна слов не важна:
#!/usr/bin/env bash
declare -a file line
declare -i lines line_number words max_words word
f_old=$- ; set -f
readarray -t file
lines=${#file[@]}
for((pass=0; pass<2; pass++)); do
for((line_number=0; line_number<lines; line_number++)); do
line=( ${file[line_number]} )
words=${#line[@]}
if [[ pass -eq 0 ]]; then
if [[ max_words -lt words ]]; then
max_words=words
commas=${line[@]/*/,}
commas=${commas// /}
fi
else
for((word=0; word<words; word++)); do
echo -n ${commas::word==0?max_words-words:1}"${line[word]}"
done
echo
fi
done
done
[[ $f_old != *f* ]] && set +f
Исходная версия vodz, :
Ну нате на bash, с однократным чтением входного файла, со стандартного ввода, длинна слов не важна:
#!/usr/bin/env bash
declare -a file line
declare -i lines line_number words max_words word
f_old=$- ; set -f
find_max_fields() {
file[$1]=$2 line=( $2 )
if [[ max_words -lt ${#line[@]} ]]; then
commas=${line[@]/*/,}
commas=${commas// /}
max_words=${#commas}
fi
}
readarray -C find_max_fields -c 1
lines=${#file[@]}
for((line_number=0; line_number<lines; line_number++)); do
line=( ${file[line_number]} )
words=${#line[@]}
for((word=0; word<words; word++)); do
echo -n ${commas::word==0?max_words-words:1}"${line[word]}"
done
echo
done
[[ $f_old != *f* ]] && set +f