最佳答案
我有一个巨大的制表符分隔的文件格式如下
X column1 column2 column3
row1 0 1 2
row2 3 4 5
row3 6 7 8
row4 9 10 11
我希望以一种仅使用 bash 命令的高效方式对它进行 换位(我可以编写一个10行左右的 Perl 脚本来完成这项工作,但它的执行速度应该比本机 bash 函数慢)。所以输出应该是
X row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
column3 2 5 8 11
我想到了这样的解决办法
cols=`head -n 1 input | wc -w`
for (( i=1; i <= $cols; i++))
do cut -f $i input | tr $'\n' $'\t' | sed -e "s/\t$/\n/g" >> output
done
但这种方法速度缓慢,而且似乎不是最有效的解决方案。我已经在 这篇文章中看到了 vi 的解决方案,但它仍然过于缓慢。有什么想法/建议/好主意吗?:-)