Mad*_*per 5 bash awk text-processing
我有一个文件,看起来像
TITLE
1.000000000000000
10.0000000000000000 0.0000000000000000 0.0000000000000000
0.0000000000000000 10.0000000000000000 0.0000000000000000
0.0000000000000000 0.0000000000000000 10.0000000000000000
U U
X X
C
0.2000000000000028 0.2000000000000028 0.2000000000000028
0.2967599999999990 0.0641000000000034 0.1551499999999990
0.1033699999999982 0.3361099999999979 0.244990000000001
Run Code Online (Sandbox Code Playgroud)
我需要一个脚本来修改底部数字块(低于C原始值 30。有没有这样的方法?
到目前为止,我所拥有的最好的是
$ awk '{if(NR>1){for(i=2;i<=NF;i++){$(i)=$(i)-10;}}print;}' data.txt | column -t
Run Code Online (Sandbox Code Playgroud)
但是,那是来自互联网,我不知道如何自己操纵它以达到预期的效果。然而,这不会打印/覆盖当前在 中的内容data.txt,这正是我想要的。
谢谢您的帮助!
这是我的 awk 版本:
awk '/^C/,0 {for (i=1;i<=NF;i++) { if ( $i != "C" ) printf "%.16f ",$i-30.0000};print"\n" }' data.txt
在这里,我们获取从 C 字符到文件末尾的所有内容,在每列中减去 30,添加换行符,然后重复该过程。显然,添加 if 语句是为了避免从 C 中减去 30。
输出是这样的:
46)serg@ubuntu[/home/xieerqi]
>_ awk '/^C/,0 {for (i=1;i<=NF;i++) { if ( $i != "C" ) printf "%.16f ",$i-30.0000};print"\n" }' data.txt
-29.7999999999999972 -29.7999999999999972 -29.7999999999999972
-29.7032400000000010 -29.9358999999999966 -29.8448500000000010
-29.8966300000000018 -29.6638900000000021 -29.7550099999999986
Run Code Online (Sandbox Code Playgroud)
这可以在原始文件中替换;或者,我们总是可以尝试使用 BEGIN { } 语句在 C 之前打印内容
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |