сценарии оболочки bash транспонируют строки и столбцы - PullRequest
2 голосов
/ 10 октября 2019

Мне нужна помощь в переносе файла, в котором просто есть несколько чисел со строками и столбцами. Я не могу использовать оболочку awk или perl, так что это довольно сложно. Я работал над этим пару часов и не могу заставить его работать правильно. Я попробовал пару других вещей, но это то, что у меня есть сейчас. Он работает, но ничего не распечатывает, поэтому я пришел к выводу, что что-то не так в моем коде. Также, если вы не знаете с помощью транспонирования, имеет ли файл:

1 2 3 
4 5 6 

... тогда он напечатает

1 4
2 5
3 6

Вот мой код:

if [ $# -gt 2 ]
then
  echo"System error">&2
exit 1

elif [[ $# -eq 2 && -e "$2" && -r "$2" ]]
then 
while read -a line; do
    for ((i=0; i < "${#line[@]}"; i++)); do
        a[$i]="${a[$i]} ${line[$i]}"
    done
done < $2

for ((i=0; i < ${#a[@]}; i++)); do
    echo ${a[i]}
done


fi

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

Вместо написания функции Bash мы могли бы использовать rs, написанное специально для преобразования матриц. Эта команда делает именно то, что вы просите:

rs -T
0 голосов
/ 10 октября 2019

Если возможно, используйте awk:

Источник (file.txt):

1 2 3
4 5 6

Результат:

1 4
2 5
3 6

Oneline awk sctript:

awk '{ for (i=1; i<=NF; i++) a[i]= (a[i]? a[i] FS $i: $i) } END{ for (i in a) print a[i] }' file.txt

Он работает так же с

1 2 3         1 4 7
4 5 6    ->   2 5
7             3 6

и с

1 2 3 4       1 5
5 6 7    ->   2 6
              3 7
              4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...