我有一个包含一些数字的文件
$ cat file.dat
0.092593
0.048631
0.027957
0.030699
0.026250
0.038156
0.011823
0.013284
0.024529
0.022498
0.013217
0.007105
0.018916
0.014079
Run Code Online (Sandbox Code Playgroud)
我想创建一个新文件,其中包含当前行与前一行的差异。预期输出应该是
$ cat newfile.dat
-0.043962
-0.020674
0.002742
-0.004449
0.011906
-0.026333
0.001461
0.011245
-0.002031
-0.009281
-0.006112
0.011811
-0.004837
Run Code Online (Sandbox Code Playgroud)
认为这是微不足道的,我从这段代码开始
f="myfile.dat"
while read line; do
curr=$line
prev=
bc <<< "$line - $prev" >> newfile.dat
done < $f
Run Code Online (Sandbox Code Playgroud)
但我很快意识到我不知道如何访问文件中的前一行。我想我还需要考虑到在阅读第一行时不应该进行减法。任何有关如何进行的指导表示赞赏!
我生成了一堆文件,它们都只包含一个数字。然后我在每个文件名中有一些关于这些文件的信息。我想要做的是将所有文件内容作为新文件中的一列收集,然后将每个文件名的一部分作为这个新文件中的单独列。
文件名如下所示:traj-num1-iter-num2-states-num3.gradient
,其中 num1、num2 和 num3 只是不同的数字。我想要的一个例子:
$ cat traj-10-iter-220-states-01.gradient
-0.0014868599999999788
$ cat newfile
traj iter states gradient
10 220 01 -0.0014868599999999788
Run Code Online (Sandbox Code Playgroud)
我怀疑这可以实现,但我不知道如何实现。
有几个问题与这个问题类似,但是当我想在多行中搜索模式时,我还没有找到有效的解决方案。下列
sed -n '/First string/,/Second string/ p' my.file
Run Code Online (Sandbox Code Playgroud)
将打印匹配模式的所有出现,但我只想要第一次出现。我正在使用 GNU sed。