如何在文件 B 的第一行上方插入文件 A 中的一行

如何在文件 B 的第一行上方插入文件 A 中的一行

我一直有这个问题,我在网上搜索过,但没有结果,所以我想在这里寻求帮助。

我有一个大约有 80,000,000 行的文件。我的工作是将它们分割成每个 500,000 行的文件。好吧,我使用代码:

#split -l 500000 myfile segment

问题1:但是,之后我有一个具体的任务。在原始文件中,第一行是ID,我应该将此行复制到最顶部的每个拆分文件中(以便每个拆分文件在第一行都有此 ID 行)。

我已经尝试过代码:

#sed -n 1,1p originalFile >> splitFile

它以某种方式完成了这项工作,但它将该ID行附加到每个拆分文件的最底部。我希望有一个代码,可以将此ID行放在每个拆分文件的最顶部(第一行)。

问题2(顺便说一句)。我有大约。 170 个分割文件。是否可以编写一个循环来将 ID 行附加到每个拆分文件的最顶部?

我将不胜感激每一条建议!

答案1

你的命令

$ sed -n "1,1p" originalFile >>splitFile

splitFile会将ID 添加到since的末尾>>告诉 shell附加流到文件。它也非常慢,因为在退出之前sed会处理所有 80M 行。originalFile

拆分后,您将拥有大约 160 个名为 、 等的文件xaa。让我们分步骤将原始文件中的标头添加到这些文件中xabxac

head -n 1 originalFile >id_line.txt

for f in x??; do
  cat id_line.txt "$f" >tmpfile && mv tmpfile "$f"
done

rm id_line.txt

第一个命令将第一行提取originalFile到它自己的文件id_line.txt.

该循环迭代所有生成的文件,假设您使用了split默认前缀等,并将id_line.txt和 分割文件连接到一个名为tmpfile.如果顺利的话,tmpfile替换分割文件。

最后一行删除了id_line.txt现在已经达到其目的的内容。

答案2

就这样简单。

(head -n1 fileA.txt; cat fileB.txt) >result.tmp

文件 result.tmp 将是 FileB,FileA 行位于其第一行上方。

当您看到更改时,就像您想要将 result.tmp 移动到 fileB.txt 一样。

您没有在问题中指定要在 fileB 中插入 fileA 的哪一行,所以我假设您想要第一行。

答案3

在覆盖之前尝试获取splitFilewith的内容。cat

echo -e "$(sed -n 1,1p originalFile)\n$(cat splitFile)" > splitFile

这很容易阅读,但对于大量文件来说可能会变得昂贵。

答案4

尝试使用 sed

$ sed -i "1i$(sed -n 1p originalFile)" splitFile
  • 1i插入文件第 1 行后面的文本。
  • $(sed -n 1p originalFile)获取原始文件的第一行

相关内容