Linux

如何每 60 秒從文件中複製行,並從上次複製的內容繼續

  • January 28, 2021

我需要每 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")}'

(如果你awkmawk,你需要通過-W interactive)。那個不需要一次讀取一個字節,因為讀取輸入的始終是相同命令的相同呼叫。請注意,awk每次執行該sleep 60命令時都會執行一個 shell。

引用自:https://unix.stackexchange.com/questions/629909