我的目录中有四个文件:例如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
任何帮助/方向都会有所帮助!谢谢。
答案 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