bashshell脚本转换行和列
我需要帮助转置一个文件,只是有一些数字在他们的行和列。我不能使用awkshell或perl,所以这有点困难。我已经做了几个小时了,不能让它正常工作。我尝试了一些其他的方法,但这就是我现在所拥有的。它运行,但不打印任何内容,因此我得出结论,我的代码中存在错误。另外,如果您无法通过转置知道文件是否有: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
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