Linux
如何每 60 秒從文件中複製行,並從上次複製的內容繼續
我需要每 60 秒從文件中複製 x 行,然後在 60 秒後繼續複製 60 秒,從上次複製的位置重新開始?
#!/bin/bash while true; do sed -n -e '1,10000' input.yml > output.txt sleep 60 done
謝謝
如果要
output.txt
在每次執行中覆蓋:#! /bin/sh - while true; do head -n 10000 > output.txt sleep 60 done < input.yml
如果不:
#! /bin/sh - while true; do head -n 10000 sleep 60 done < input.yml > output.txt
那些每 60 秒複製*多達10000 行。*如果沒有那麼多行,它不會等到有 10000 行。
他們假設一個
head
實現將游標留在輸入中,就在他們輸出的列表字節之後。如果輸入文件是可搜尋的(例如何時input.yml
是正常文件),則這是 POSIX 要求。如果您想在每次迭代中等待這 10000 行,您可以(在 GNU 系統上)使用:
tail -fn+1 input.yml | while true; do sed -u 10000q > output.txt sleep 60 done
在這裡,輸入是一個不可搜尋的管道。所以我們需要一個
head
可以一次讀取一個字節直到第 10000個換行符的實現。因此 GNUsed
就是-u
這樣做的。另一種方法是:
tail -fn+1 input.yml | awk -v out=output.txt -v n=10000 ' {print > out} NR % n == 0 {close(out); system("sleep 60")}'
(如果你
awk
是mawk
,你需要通過-W interactive
)。那個不需要一次讀取一個字節,因為讀取輸入的始終是相同命令的相同呼叫。請注意,awk
每次執行該sleep 60
命令時都會執行一個 shell。