![循环遍历文件并水平连接](https://linux22.com/image/79954/%E5%BE%AA%E7%8E%AF%E9%81%8D%E5%8E%86%E6%96%87%E4%BB%B6%E5%B9%B6%E6%B0%B4%E5%B9%B3%E8%BF%9E%E6%8E%A5.png)
我正在尝试执行以下操作:
- 循环遍历文件列表
- 编辑每个文件并输出“修剪”文件
- 将每个修剪过的文件依次水平连接到预制的主文件中
我的步骤 1 和 2 可以工作,但无法让步骤 3 工作。
例子
主文件:
Col1 Col2
A 1
B 1
C 2
文件 S1 的修剪文件:
S1.Col3 S1.Col4
0 1
1 1
1 1
S1 和 S2 加入 MASTER 后我想要的输出:
Col1 Col2 S1.Col3 S1.Col4 S2.Col3 S2.Col4
A 1 0 1 0 1
B 1 1 1 1 0
C 2 1 1 0 0
在每个循环之后,我尝试运行类似的东西:
paste MASTER.txt S1.txt > MASTER.txt
然而,我得到的不是上面的文件,而是仅包含最后一个 S 文件数据的文件。我尝试在不输出和循环之外运行它,一切正常。预先感谢您的任何答复。
为了完成这个工作,这里是我的 for 循环的一个非常简化的分解。
for FILE in FILELIST
do
cut -f4,6 $FILE > ${FILE}_trimmed.txt
paste MASTER.txt ${FILE}_trimmed.txt > MASTER.txt
done
答案1
感谢 1_CR 在评论中回答了这个问题。
> MASTER.txt
在粘贴实际完成水平连接之前截断文件。答案是输出到一个临时文件(例如MASTER2.txt),然后将其重命名(使用mv 命令)为正确的文件名。
我的旧代码:
paste MASTER.txt ${FILE}_trimmed.txt > MASTER.txt
固定代码:
paste MASTER.txt ${FILE}_trimmed.txt > MASTER2.txt && mv MASTER2.txt MASTER.txt