我需要换位文件的帮助,该文件中仅包含一些带有行和列的数字。我不能使用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
答案 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