使用sed将文件的一部分提取到不同的文件

使用sed将文件的一部分提取到不同的文件

我想编写一个脚本来提取部分数据文件并将其保存在不同的文件中。我写了一个脚本,但它给出了一些错误。脚本是

#!/bin/bash

nn=0
mn=0

for var1 in 1 2 3 ; do
    nn=nn+2
    mn=mn+302

    sed -n '$nn','$mn'p  dos.dat > $var1.dat

    nn=mn
done

答案1

脚本的直接问题是变量是单引号的,阻止它们被 shell 扩展:

sed -n '$nn','$mn'p dos.dat > $var1.dat

也许你的意思是这样的

sed -n "$nn,${mn}p" dos.dat > $var1.dat

其中第二个变量用{和分隔,}将其与 分开p

另外,表达式语法也是一个问题。 “=”右侧的变量需要“$”来获取它们的值。如果不使用 '$((' 或 来处理它们expr,右侧也只是一个字符串,而不是数字。

也许你的意思是这样的:

#!/bin/bash

nn=0 ; mn=0
for var1 in 1 2 3 ; do
    nn=$(($nn+2))
    mn=$(($mn+302))

    sed -n "$nn,${mn}p" dos.dat > $var1.dat

    nn=$mn
done

根据POSIX,其中的 '$'$((是不必要的:任一都可以:

如果 shell 变量x包含形成有效整数常量的值,可选地包含前导加号或减号,然后是算术扩展"$((x))""$(($x))"应返回相同的值。

相关内容