zx8*_*754 2 unix bash command-line file concatenation
我们有以下两个文件:
t1.txt
1
2
3
Run Code Online (Sandbox Code Playgroud)
t2.txt
a
s
d
Run Code Online (Sandbox Code Playgroud)
我可以用:
paste -d"," t1.txt t2.txt > result.txt
Run Code Online (Sandbox Code Playgroud)
并输出result.txt
1,a
2,s
3,d
Run Code Online (Sandbox Code Playgroud)
哪个是完美的,但我想在下面做:
paste -d"," t1.txt t2.txt > t1.txt
Run Code Online (Sandbox Code Playgroud)
我期待t1.txt与result.txt相同,但它如下所示,而不是我需要的:
,a
,s
,d
Run Code Online (Sandbox Code Playgroud)
我可以将result.txt重命名为t1.txt,但想知道是否有更好的方法?
注意:
paste,只要我们避免创建像result.txt这样的临时文件就可以.该sponge实用程序仅为此任务创建:
paste -d, t1.txt t2.txt | sponge t1.txt
Run Code Online (Sandbox Code Playgroud)
sponge是moreutils包的一部分.在debian/ubuntu类系统上运行apt-get install moreutils.
fname=$(mktemp) && paste -d, t1.txt t2.txt >>"$fname" && mv "$fname" t1.txt
Run Code Online (Sandbox Code Playgroud)
如果一个人没有获得任何一种mktemp或sponge,可以使用:
paste -d, t1.txt t2.txt > ~/result$$.txt && mv ~/result$$.txt t1.txt
Run Code Online (Sandbox Code Playgroud)
您可以选择放置临时文件的位置.在上面,我们把它放在用户的主目录中~/,因为这可以避免将文件放在目录中的安全问题/tmp.
$$是进程ID.预计至少在该过程的生命周期中这是独特的.