如何在 bash 中加速尾部和头部
how to speed up tail and head in bash
我有一个名为 stock_messages
的巨型文本文件,如下所示:
H: TSLA
A: id1, 100
E: id1, 20
F: id2, 250
...
H: AAPL
A: id1, 100
A: id2, 20
E: id1, 80
A: id2, 10
...
我想要做的是创建一个单独的文本文件,其中包含每只股票的消息(例如 AAPL.txt
、TSLA.txt
等)。
我写了一个 bash 脚本,这样
start=-1
stock_name=""
grep -n -i '^H' $file | awk -F "[:,]" {'print , $NF'} | while read -r line; do
line_number=$(echo $line | awk -F " " {'print '})
if [[ "$start" -gt 0 ]]
then
tail -n "+start" $file | head -n "$(($line_number-$start))" > "./data/${stock_name}.txt"
echo "saved $stock_name data!"
fi
start=$line_number
stock_name=$(echo $line | awk -F " " {'print '})
done
基本上,我使用 H
所在的行号,并使用 tail
和 head
将这些行取出并保存到单独的文件中。
脚本最初运行得非常快,但很快就变慢了,我不确定为什么。
如有任何建议,我们将不胜感激!
如果awk
是一个选项
$ awk '/^H:/ {close(stock_message); stock_message=".txt"} {print > stock_message}' input_file
$ cat AAPL.txt
H: AAPL
A: id1, 100
A: id2, 20
E: id1, 80
A: id2, 10
...
$ cat TSLA.txt
H: TSLA
A: id1, 100
E: id1, 20
F: id2, 250
...
我有一个名为 stock_messages
的巨型文本文件,如下所示:
H: TSLA
A: id1, 100
E: id1, 20
F: id2, 250
...
H: AAPL
A: id1, 100
A: id2, 20
E: id1, 80
A: id2, 10
...
我想要做的是创建一个单独的文本文件,其中包含每只股票的消息(例如 AAPL.txt
、TSLA.txt
等)。
我写了一个 bash 脚本,这样
start=-1
stock_name=""
grep -n -i '^H' $file | awk -F "[:,]" {'print , $NF'} | while read -r line; do
line_number=$(echo $line | awk -F " " {'print '})
if [[ "$start" -gt 0 ]]
then
tail -n "+start" $file | head -n "$(($line_number-$start))" > "./data/${stock_name}.txt"
echo "saved $stock_name data!"
fi
start=$line_number
stock_name=$(echo $line | awk -F " " {'print '})
done
基本上,我使用 H
所在的行号,并使用 tail
和 head
将这些行取出并保存到单独的文件中。
脚本最初运行得非常快,但很快就变慢了,我不确定为什么。
如有任何建议,我们将不胜感激!
如果awk
是一个选项
$ awk '/^H:/ {close(stock_message); stock_message=".txt"} {print > stock_message}' input_file
$ cat AAPL.txt
H: AAPL
A: id1, 100
A: id2, 20
E: id1, 80
A: id2, 10
...
$ cat TSLA.txt
H: TSLA
A: id1, 100
E: id1, 20
F: id2, 250
...