【发布时间】:2016-02-05 18:09:14
【问题描述】:
问题:我有一个 CSV 转储文件 - 超过 250,000 行。当我使用while read 时 - 需要一段时间(没有双关语)。我想回到最后 10,000 行来做我需要做的事情,而不是 250,000 行。
代码片段:我当前的代码是这样的:
IFS=","
while read line
do
awk_var=`echo "$line" | awk -F" " '{print $0}'`
var_array=($awk_var)
read -a var_array <<< "${awk_var}"
echo "${var_array[1]}"
done </some_directory/directory/file_in_question.csv
问题:在使用 bash 脚本读取 file_in_question.csv 时,如何使用 tail -n10000 和 while read line?
【问题讨论】:
-
{print $0}与{print}到 awk 相同,这与根本不使用 awk 相同。你想在那里做什么?这里的时间很可能是从 250,000 次调用到awk(每个循环一次)。如果可以,请避免使用这些。 -
@EtanReisner 嗯,第一个参数是以秒为单位的 Unix 时间戳,所以,我计算一个边界(两个日期/时间戳),并在上述边界之间提取数据。做这样的事情可以使我的代码更快的替代方法是什么?
-
我的意思是
awk_var=$(echo "$line" | awk -F " " '{print $0}')与awk_var=$(echo "$line")完全相同,这与awk_var=$line完全相同,这与首先使用$line相同,只是少了两个外部命令,少一个子shell和几行代码。同样var_array=($awk_var)是错误的,您稍后用read覆盖awk_var。
标签: bash csv while-loop tail