bash shell脚本转置行和列

时间:2019-10-10 03:32:44

标签: bash shell transpose

我需要换位文件的帮助,该文件中仅包含一些带有行和列的数字。我不能使用awk shell或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 :(得分:0)

如果可能,请使用awk:

来源(file.txt):

1 2 3
4 5 6

结果:

1 4
2 5
3 6

Oneline awk条纹:

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

答案 1 :(得分:0)

我们可以使用专门为重塑矩阵而编写的rs而不是编写Bash函数。此命令完全符合您的要求:

rs -T