bash - 如何使用 while read line with tail -n

标签 bash csv while-loop tail

问题:我有一个 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 -n10000while 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/

相关文章:

bash - 从特定行号拖尾日志文件

vba - 打开 CSV 并复制

Python - 从 CSV 创建字典的字典

c++ - C++ 中的字符串验证

linux - 如何使用 bash/shell 脚本创建 RS256 JWT 断言?

linux - 如何检查文件是否存在但在 shell 脚本的路径中间泛化?

bash - 过滤某个时间范围内的日志文件数据

python - 如何快速将csv表导出到python字典?

c++ - 在后台运行 "While loop"

java - While循环问题: Does not pause