假设我有一个包含制表符分隔值的简单文件:
a b c d e f
aa bb cc dd ee ff
A B C D E F
如何将其转换为矩阵:标签成为换行符,反之亦然:
a aa A
b bb B
c cc C
d dd D
e ee E
f ff F
线条可能相当长。我知道如何通过将所有内容读入2D缓冲区然后将整个内容写出来来在C中完成它,但我正在寻找使用shell脚本的更简单的解决方案,但却没有想到任何明显的解决方案。
答案 0 :(得分:1)
除非你继续进行多次传递(一行中有元素的传递次数),否则我看不出如何避免使用某种缓冲区。
顺便说一句,你指的是什么样的外壳?
这个其他SO帖子(An efficient way to transpose a file in Bash)似乎恰好解决了bash中的问题。
答案 1 :(得分:0)
是的,你可以用一种非常简单的方式来做到这一点:
#!/bin/bash
ar1=( a b c d e f )
ar2=(aa bb cc dd ee ff )
ar3=(A B C D E F )
for ((i=0; i<${#ar1[@]}; i++)); do
printf " %s %s %s\n" ${ar1[i]} ${ar2[i]} ${ar3[i]}
done
输出:
a aa A
b bb B
c cc C
d dd D
e ee E
f ff F
修改从命令行读取数组也很简单:
ar1=( $1 )
ar2=( $2 )
ar3=( $3 )
for ((i=0; i<${#ar1[@]}; i++)); do
printf " %2s %2s %2s\n" ${ar1[i]} ${ar2[i]} ${ar3[i]}
done
命令行和输出:
$ ./mtrxpose.sh "a b c d e f" "aa bb cc dd ee ff" "A B C D E F"
a aa A
b bb B
c cc C
d dd D
e ee E
f ff F