Bash 如何使用sed或awk写入特定的行范围?

Bash 如何使用sed或awk写入特定的行范围?,bash,unix,awk,sed,Bash,Unix,Awk,Sed,我只想将命令的输出写入文件的特定行范围 例如,第一个命令应写入范围0-1000,然后第二个命令写入范围1001-2000等 我已经成功地使用sed-I命令写入一行代码,但这对我毫无帮助 我最后在for循环中尝试的是 for cmd in "${commands[@]}"; do awk "NR >=$counter && NR <=$((counter + 1002)) {print $(eval $cmd)}" file > $logf

我只想将命令的输出写入文件的特定行范围

例如,第一个命令应写入范围0-1000,然后第二个命令写入范围1001-2000等

我已经成功地使用
sed-I
命令写入一行代码,但这对我毫无帮助

我最后在for循环中尝试的是

    for cmd in "${commands[@]}"; do
        awk "NR >=$counter && NR <=$((counter + 1002)) {print $(eval $cmd)}" file > $logfile
        counter=$((counter + 1003))
    done
“${commands[@]}”中cmd的
;做

awk“NR>=$counter&&NR而不是在数千次
awk
迭代中对同一命令求值并递增
counter
——使用以下
sed
优化方法:

cnt=1
for cmd in "${commands[@]}"; do
    cmd_out="$(eval $cmd)"
    sed -n "$cnt,$((cnt + 1002)) s/.*/$cmd_out/p" 10lines.txt >> $logfile
    cnt=$((cnt + 1003))
done

但是,如果您不实际使用已处理文件的内容,您可以在内部范围内进行迭代,并将相同的命令输出打印/附加到目标文件。

类似的情况如何?
awk
脚本会截断或填充1000行

$ cat foo.sh
for cmd in 'seq 5' 'seq 3000'; do
        $cmd | awk 'NR > 1000 { exit } END { while (NR++ < 1000) print ""} 1'
done >foo.txt
$ bash foo.sh
$ wc -l foo.txt
2000 foo.txt
$ head foo.txt
1
2
3
4
5





$ tail foo.txt
991
992
993
994
995
996
997
998
999
1000
$cat foo.sh
对于'seq 5'和'seq 3000'中的cmd;执行
$cmd | awk'NR>1000{exit}END{而(NR++<1000)打印“}1”
完成>foo.txt
$bash foo.sh
$wc-l foo.txt
2000 foo.txt
$head foo.txt
1.
2.
3.
4.
5.
$tail foo.txt
991
992
993
994
995
996
997
998
999
1000

我无法想象你想做什么。请在你的问题中加入一个例子,用简洁、可测试的样本输入和预期的输出块,比如说,4行而不是1000行。例如,如果你需要一个工具,可以用
seq
来代替
$cmd
例如,$(eval$cmd)的输出是否总是精确到1000行?事实上,问题很清楚,我想将一组可以计数在0-1000之间的行写入到一个特定范围的文件中。对于同一个文件,我想将其他内容写入下一个范围,如1001-2000,我没有得到这部分:
s/*/$cmd\u out/p”
事实上,我真的不想使用除bash@SercanOzdemir试试这个版本,它只使用
awk