linux中粘贴和标准输出的问题

Abu*_*que 4 io-redirection text-processing paste

我有两个要合并的文件,一个文件是:

linux$ cat temp2
linear_0_A_B linear_0_B_A
103027.244444 102714.177778
103464.311111 102876.266667
103687.422222 103072.711111
103533.244444 102967.733333
103545.066667 102916.933333
103621.555556 103027.511111
104255.776536 103006.256983
103712.178771 102877.139665
103817.555556 103198.488889
103701.422222 103133.200000
Run Code Online (Sandbox Code Playgroud)

另一个文件是:

linux$ cat temp
linear_1_A_B linear_1_B_A
118620.444444 109212.355556
108408.488889 105744.444444
108136.311111 105174.933333
108627.688889 105390.044444
108356.577778 105412.888889
108559.204420 105667.933702
108469.392265 105547.314917
109032.044693 105497.698324
108925.866667 105986.222222
107975.733333 105070.000000
Run Code Online (Sandbox Code Playgroud)

我想将 temp 中的列粘贴到 temp2 中,并像这样保留 temp2 文件:

linux$ paste temp2 temp
linear_0_A_B linear_0_B_A       linear_1_A_B linear_1_B_A
103027.244444 102714.177778     118620.444444 109212.355556
103464.311111 102876.266667     108408.488889 105744.444444
103687.422222 103072.711111     108136.311111 105174.933333
103533.244444 102967.733333     108627.688889 105390.044444
103545.066667 102916.933333     108356.577778 105412.888889
103621.555556 103027.511111     108559.204420 105667.933702
104255.776536 103006.256983     108469.392265 105547.314917
103712.178771 102877.139665     109032.044693 105497.698324
103817.555556 103198.488889     108925.866667 105986.222222
103701.422222 103133.200000     107975.733333 105070.000000
Run Code Online (Sandbox Code Playgroud)

但是当我做标准输出,并显示temp2时,结果就不一样了。

linux$ paste temp2 temp > temp2
linux$ cat temp2
        linear_1_A_B linear_1_B_A
        118620.444444 109212.355556
        108408.488889 105744.444444
        108136.311111 105174.933333
        108627.688889 105390.044444
        108356.577778 105412.888889
        108559.204420 105667.933702
        108469.392265 105547.314917
        109032.044693 105497.698324
        108925.866667 105986.222222
        107975.733333 105070.000000
Run Code Online (Sandbox Code Playgroud)

怎么解决??

roa*_*ima 5

你在最后一个区块中写道,

linux$ paste temp2 temp > temp2
Run Code Online (Sandbox Code Playgroud)

你不可以做这个。(好吧,你可以,但它不会工作。)这里发生的是 shell 截断temp2准备从paste命令发送输出。该paste temp2 temp命令然后运行 ​​- 但到这个阶段temp2已经是零长度。

你可以做的是这个,它使用第三个文件来收集输出,然后temp2用它的内容替换你的。在&&该内容仅如果换成保证了paste“成功”,而rm -f消除瞬态temp3如果文件mv没有被触发,或在一些意想不到的方式失败。

paste temp2 temp > temp3 && mv -f temp3 temp2
rm -f temp3
Run Code Online (Sandbox Code Playgroud)