问题:我有一个 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
问题 在读取 file_in_question.csv
时,如何使用 tail -n10000
和 while read line
用 bash 脚本?
最佳答案
替换:
done </some_directory/directory/file_in_question.csv
与:
done < <(tail -n10000 /some_directory/directory/file_in_question.csv)
<(...)
构造称为过程替换。它创建一个类似文件的对象,bash 可以从中读取。因此,这取代了从 some_directory/directory/file_in_question.csv
读取直接阅读 tail -n10000 /some_directory/directory/file_in_question.csv
.
像这样使用进程替换可以让您保留 while
在主 shell 中循环,而不是在子 shell 中循环。因此,您在 while
中创建的变量loop 将在循环退出后保留它们的值。
加速原始代码
所示代码打印 CSV 文件的第二列。如果这就是代码应该做的全部,那么它可以替换为:
awk -F, '{print $2}' /some_directory/directory/file_in_question.csv
关于bash - 如何使用 while read line with tail -n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535558/