【发布时间】:2017-11-16 17:21:14
【问题描述】:
我想在第 1 列加入 28 个文件,在每次迭代加入时保留两个文件的所有结果,并用 0 填充空列。总共有两列。前 3 个文件的预期输入和输出:
文件1
a 1
b 2
c 1
d 4
文件2
a 2
b 3
文件3
c 2
d 2
e 1
加入
a 1 2 0
b 2 3 0
c 1 0 2
d 4 0 2
e 0 0 1
我已经在我的实际文件上使用管道写出了整个连接,它可以工作,但显然很混乱。为了清楚起见,我在这里用省略号缩短了它:
join -t $'\t' -a 1 -a 2 -e '0' -o 0 1.2 2.2 -1 1 -2 1 *D3-E-N-1*/*matrix.txt.cut *D3-E-N-2*/*matrix.txt.cut | join -t $'\t' -a 1 -a 2 -e '0' -o 0 1.2 1.3 2.2 -1 1 -2 1 - *D3-E-N-3*/*matrix.txt.cut | join -t $'\t' -a 1 -a 2 -e '0' -o 0 1.2 1.3 1.4 2.2 -1 1 -2 1 - *D3-E-N-4*/*matrix.txt.cut | join -t $'\t' -a 1 -a 2 -e '0' -o 0 1.2 1.3 1.4 1.5 2.2 -1 1 -2 1 - *D3-E-N-5*/*matrix.txt.cut | ... > final.matrix.txt
我知道这可以循环添加新字段,但我是编程新手,循环不是我的强项。我试过这个(从这里bash join multiple files with empty replacement (-e option)):
i=3
orderl='0,1.2'
orderr=',2.2'
for k in UNITAS*/*seq_cut
do
if [ -a final.results ]
then
join -a1 -a2 -e "0" -o "$orderl$orderr" final.results $k > tmp.res
orderl="$orderl,1.$i"
i=$((i+1))
mv tmp.res final.results
else
cp $k final.results
fi
done
这给了我错误
[:参数太多
[:参数太多
cp:覆盖'final.results'?
是否有人对递归连接文件的脚本或更适合此任务的程序有建议?
非常感谢!
【问题讨论】: