【发布时间】:2017-12-19 23:12:25
【问题描述】:
我们有以下两个文件:
t1.txt
1
2
3
t2.txt
a
s
d
我可以使用:
paste -d"," t1.txt t2.txt > result.txt
并输出result.txt
1,a
2,s
3,d
这是完美的,但我想在下面做:
paste -d"," t1.txt t2.txt > t1.txt
我希望 t1.txt 与 result.txt 相同,但它如下所示,而不是我需要的:
,a
,s
,d
我可以将 result.txt 重命名为 t1.txt,但想知道是否有更好的方法?
注意:
- 解决方案不一定是
paste,只要我们避免创建像 result.txt 这样的临时文件,可以是任何解决方案。 - 实际的 t1.txt 和 t2.txt 文件各有 160 万行。
【问题讨论】:
-
我建议:
paste -d"," t1.txt t2.txt > result.txt && mv result.txt t1.txt -
“只要我们避免创建像 result.txt 这样的临时文件。” 这取决于你的意思。由于新旧文件中的数据在处理过程中必须同时存在。临时结果必须存储在某个地方,无论是在内存中还是在磁盘上。
-
@John1024 好点,我想我对临时文件没问题。我担心的是,这将并行运行,所以
result.txt文件应该是特定运行的,也许使用mktemp? -
@zx8754 您的系统上是否安装了
mktemp?如果没有,通常可以使用:paste -d, t1.txt t2.txt > ~/result$$.txt && mv ~/result$$.txt t1.txt -
@John1024 请用
$$和mktemp发布答案,同时我会测试回复你,谢谢。
标签: bash file unix command-line concatenation