bashshell脚本转换行和列

bashshell脚本转换行和列,bash,shell,transpose,Bash,Shell,Transpose,我需要帮助转置一个文件,只是有一些数字在他们的行和列。我不能使用awkshell或perl,所以这有点困难。我已经做了几个小时了,不能让它正常工作。我尝试了一些其他的方法,但这就是我现在所拥有的。它运行,但不打印任何内容,因此我得出结论,我的代码中存在错误。另外,如果您无法通过转置知道文件是否有: 1 2 3 4 5 6 。。。然后打印出来 1 4 2 5 3 6 这是我的密码: if [ $# -gt 2 ] then echo"System error">&2 ex

我需要帮助转置一个文件,只是有一些数字在他们的行和列。我不能使用awkshell或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
if[$#-gt 2]
然后
回显“系统错误”>&2
出口1
elif[$#-eq 2&&e“$2”&&r“$2”]]
然后
读的时候——一行;做
对于((i=0;i<“${行[@]}”;i++);做
a[$i]=“${a[$i]}${line[$i]}”
完成
完成<$2
对于((i=0;i<${a[@]};i++);做
echo${a[i]}
完成
fi
如果可能,请使用awk:

来源(file.txt):

结果:

1 4
2 5
3 6
单线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 4       1 5
5 6 7    ->   2 6
              3 7
              4

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

rs -T

它对我有效(除了
$#-gt 2
条件在
echo
和消息之间需要一个空格)。您是如何运行它的(以及您传递了哪些参数)?谢谢您的回复。所以当我运行这个脚本时,我会:矩阵转置m1。。。哪个矩阵是这个文件的名称,tranpose是这个函数,然后m1只是一个文本文件,包含我需要转换的数字。谢谢你的答复,听起来应该行得通。我会尝试将
set-x
放在问题部分之前,这样您就可以看到它运行时发生了什么。您的确切意思是在需求空间中的什么位置?你是不是也在说echo“system failure”(系统故障),因为它实际上没有任何作用是的,它应该是
echo“system failure”
——在有空格和没有空格的情况下都尝试一下,然后比较结果。
1 2 3 4       1 5
5 6 7    ->   2 6
              3 7
              4
rs -T