【发布时间】:2020-06-22 10:12:06
【问题描述】:
我要对齐以下文件的列。
cat input.dat
0.1 0.22474401451476203 0.22474401451476203 0.22468184471725106 0.22474401451476203 0.22474466451476202
0.15000000000000002 0.09328229408835575 0.09328229408835575 0.09323107184876382 0.09328229408835575 0.09328294408835575
0.2 0.04700471936101653 0.04700471936101653 0.04696126453738079 0.04700471936101653 0.04700536936101653
0.25 0.025562449852510022 0.025562449852510022 0.025525019904759787 0.025562449852510022 0.02556309985251002
0.30000000000000004 0.013916483625141736 0.013916483625141736 0.013883976359424946 0.013916483625141736 0.013917133625141737
0.35 0.006918972749219993 0.006918972749219993 0.0068906275518585275 0.006918972749219993 0.006919622749219994
0.4 0.0024319065284844395 0.0024319065284844395 0.002407166678723833 0.0024319065284844395 0.0024325565284844396
0.45000000000000007 -0.0005564879581991863 -0.0005564879581991863 -0.0005780476659970637 -0.0005564879581991863 -0.0005558379581991862
0.5 -0.0025717430483357794 -0.0025717430483357794 -0.0025904580222108962 -0.0025717430483357794 -0.0025710930483357794
我可以做到(和预期的输出):
cat input.dat | column -t
0.1 0.22474401451476203 0.22474401451476203 0.22468184471725106 0.22474401451476203 0.22474466451476202
0.15000000000000002 0.09328229408835575 0.09328229408835575 0.09323107184876382 0.09328229408835575 0.09328294408835575
0.2 0.04700471936101653 0.04700471936101653 0.04696126453738079 0.04700471936101653 0.04700536936101653
0.25 0.025562449852510022 0.025562449852510022 0.025525019904759787 0.025562449852510022 0.02556309985251002
0.30000000000000004 0.013916483625141736 0.013916483625141736 0.013883976359424946 0.013916483625141736 0.013917133625141737
0.35 0.006918972749219993 0.006918972749219993 0.0068906275518585275 0.006918972749219993 0.006919622749219994
0.4 0.0024319065284844395 0.0024319065284844395 0.002407166678723833 0.0024319065284844395 0.0024325565284844396
0.45000000000000007 -0.0005564879581991863 -0.0005564879581991863 -0.0005780476659970637 -0.0005564879581991863 -0.0005558379581991862
0.5 -0.0025717430483357794 -0.0025717430483357794 -0.0025904580222108962 -0.0025717430483357794 -0.0025710930483357794
但我正在寻找inplace 解决方案(类似于sed -i)。
当然,我可以将文件重命名为其他名称。
cat input.dat | column -t > output.dat
mv output.dat input.dat
但我想知道是否有更好的解决方案。
【问题讨论】:
-
修改后的文件应该是什么样子?
-
@Shawn 查看编辑
-
sed -i不是真正的就地解决方案。它会在您的原始文件旁边创建一个文件,然后覆盖,就像您所做的那样。 -
有一个
moreutils包,其中包含sponge工具,可让您就地编辑任何内容。更多信息here。它提供的简化并不大,因此由您决定是否值得在我熟悉的任何发行版上安装一个非默认包。 -
为什么你调用的工具创建和复制临时文件对你很重要(就像
sed -i、perl -i、awk -i inplace等一样)而不是你自己做(例如sed 'script' file > tmp && mv tmp file)?要求这个通常会引起“呃,为什么?”论坛上的回应,比如要求“单线”,但也许你有一个我们可以提供帮助的理由?