簡體   English   中英

如何使用 sed 或 awk 寫入特定的行范圍?

[英]How can I write to a specific line range with sed or awk?

我只是想將命令的輸出寫入文件的特定行范圍。

例如,第一個命令應該寫入范圍 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

拋出參數太長錯誤。

任何幫助,將不勝感激。

不要在數千次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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM