循环遍历文件并水平连接

循环遍历文件并水平连接

我正在尝试执行以下操作:

  1. 循环遍历文件列表
  2. 编辑每个文件并输出“修剪”文件
  3. 将每个修剪过的文件依次水平连接到预制的主文件中

我的步骤 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

相关内容