基于目录中所有文件的两列连接文件

时间:2017-07-01 23:10:42

标签: bash loops sorting join

我的目录中有四个文件:例如a.txt; b.txt; c.txt; d.txt。我想基于两个常见列将所有其他文件加入到每个文件中(即将a.txt与b.txt,c.txt和d.txt连接;使用a.txt,c.txt和d加入b.txt。 txt;使用a.txt,b.txt和d.txt加入c.txt。为我能做的两个文件执行此操作:

join -j 2 <(sort -k2 a.txt) <(sort -k2 b.txt) > a_b.txt

如何在循环中为目录中的所有文件编写此文件?我已经尝试过以下代码,但这不起作用。

for i j in *; do join -j 2 <(sort -k2 $i) <(sort -k2 $j) > ${i_j}.txt

任何帮助/方向都会有所帮助!谢谢。

1 个答案:

答案 0 :(得分:0)

这可能是一种方法:

#!/bin/bash


files=( *.txt )


for i in "${files[@]}";do

    for j in "${files[@]}";do

        if [[ "$i" != "$j" ]];then

            join -j 2  <(sort -k2 "$i") <(sort -k2 "$j") > "${i%.*}_$j"

        fi

    done

done