Я хочу транспонировать заданную матрицу, представленную в скрипте оценки.Я не могу использовать AWK.Функция должна быть написана на Bash.У меня есть следующий код, где AWK отлично работает с предоставленным скриптом оценки.скрипт не AWK возвращает ошибки, которые не являются обязательными или имеют неправильные размеры.в целом результаты выглядят одинаково, и я застрял на том, почему они кажутся отличными от сценария оценки.если кто-то может помочь преобразовать полосу AWK в Bash без использования AWK.
Транспонирование 1 - один из способов чтения файла
DONE=false
until $DONE;
do
read -a myLine || DONE=true
for ((i=0;i<"${#myLine[@]}";i++))
do
temp_array[$i]+=" ${myLine[$i]}"
done
done < $1
for ((i=0;i<${#temp_array[@]};i++))
do
printf "%s\t" ${temp_array[i]} >> temp_file
printf "\n" >> temp_file
done
Транспонирование 2 - чтение файла.будет читать все строки в массиве.
while read -a myLine || [[ ${#myLine[@]} -gt 0 ]]
do
for ((i=0;i<"${#myLine[@]}";i++))
do
temp_array[$i]+=" ${myLine[$i]}"
done
done < $1
for ((i=0;i<${#temp_array[@]};i++))
do
printf "%s\t" ${temp_array[i]} >> temp_file
printf "\n" >> temp_file
done
cat temp_file
rm temp_file
Оба работают и, кажется, имеют одинаковый вывод.
Этот код отлично работает со скриптом оценки:
cp $1 $temp_input #copy file to temp file named temp_input
awk '{ for (i=1; i<=NF; i++) {a[NR,i] = $i} }
NF>p { p = NF }
END {
for(j=1; j<=p; j++) {
str=a[1,j]
for(i=2; i<=NR; i++)
{str=str" "a[i,j];}
printf str"\n"}
}' $temp_input # for loop to transpose temp_input file contents
rm $temp_input
Ожидаемый результат - транспонированная матрица, которая не является обязательной.Оба результата из кода NON-AWK и кода, предоставленного с использованием AWK, должны иметь одинаковый точный результат.Пожалуйста, помогите.