![](/img/trans.png)
[英]How can i create a Linux Script (bash, sed, awk…) to add a line in a specific section of a configuration's file
[英]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.