3ks*_*stc 3 csv bash tail while-loop
问题:我有一个 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
Run Code Online (Sandbox Code Playgroud)
问题:在阅读with bash 脚本时如何使用tail -n10000with ?while read linefile_in_question.csv
代替:
done </some_directory/directory/file_in_question.csv
Run Code Online (Sandbox Code Playgroud)
和:
done < <(tail -n10000 /some_directory/directory/file_in_question.csv)
Run Code Online (Sandbox Code Playgroud)
该<(...)构造称为进程替换。它创建了一个类似文件的对象,bash 可以从中读取。因此,这将some_directory/directory/file_in_question.csv直接从读取替换为从读取tail -n10000 /some_directory/directory/file_in_question.csv。
使用这样的进程替换允许您将while循环保留在主 shell 中,而不是子 shell 中。因此,您在while循环中创建的变量将在循环退出后保留其值。
所示代码打印 CSV 文件的第二列。如果这就是代码应该做的所有事情,那么它可以替换为:
awk -F, '{print $2}' /some_directory/directory/file_in_question.csv
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8035 次 |
| 最近记录: |