我有多个名为 choochoo1.tsv
、choochoo2.tsv
、... choochoo(nth).tsv
文件的 .tsv 文件.我还有一个 main.tsv
文件。我想提取 main.tsv
中的标题行并粘贴到所有 choochoo(nth).tsv
文件中。请注意,目录中还有其他 .tsv
文件,我不想更改或粘贴标题,所以我无法执行 *.tsv
并全选.tsv
文件(因此需要为想要的文件选择 choochoo
字符串)。这是我使用 bash 脚本尝试过的,但无法使其工作。请建议正确的方法。
for x in *choochoo; do
head -n1 main.tsv > $x
done
最佳答案
您的文件 glob 以及重定向有问题:
- 文件 glob 会捕获类似
AAchoochoo
但不是choochoo1.tsv
甚至AAchoochoo.tsv
- 重定向将覆盖现有文件而不是添加它们。添加到文件的重定向命令是
>>>
,但它会将文本附加到末尾,而您想在开头添加文本。
将文本添加到现有文件的问题在于,您必须打开文件进行读写,然后按顺序流式传输添加的文本和原始文本——这通常是人们失败的地方,因为 shell 可以不要那样打开文件(有一种稍微复杂的直接执行此操作的方法,即打开文件进行读写,但我不打算进一步解决这个问题)。
你可能想使用一个临时文件,像这样:
for x in choochoo[0-9]*.tsv; do
mv "$x"{,.orig}
(head -n1 main.tsv; cat "$x.orig") > $x
rm "$x.orig"
done
关于linux - 在多个 tsv(制表符分隔)文件中粘贴标题行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390121/