【问题标题】:Query an array builded from many flat files查询从许多平面文件构建的数组
【发布时间】:2021-08-17 15:42:49
【问题描述】:

编辑: 我有 180 个带有多维数组的平面文件(每个文件有 300 列和 300 行,以空格分隔)

样本文件https://filebin.net/ij7jv4stioekkt6y/sample_file.txt 将于 05.06.2021 删除

我正在寻找查询的最佳解决方案,例如:

显示列 = 145 和行 = 155 的循环中所有文件的值

我尝试将其全部放入 MySQL 并进行查询,但查询执行时间相当“昂贵”

寻找一些提示和技巧。

问候 亚历克斯

【问题讨论】:

  • 阅读和理解您的问题对我们来说似乎也很昂贵!请分享您尝试过的代码。你在谈论文件吗?和 300 列?完全误导
  • 请在您的问题中添加示例输入(无描述、无图像、无链接)和该示例输入所需的输出(无评论)。
  • 内容更新了,希望能更好的理解。
  • @Shawn :我可以使用,有道理,我会尝试在循环中使用它“for a in $(....
  • 如果您必须执行 LOT 的这些类型的查找,并且性能很理想,我可能会考虑使用数据库解决方案;您的'MySQL' 解决方案可能可行,但您需要提供更多关于quite "expensive" 含义的详细信息(例如,在mysql 标签下发布您的DDL、查询和性能指标);我猜测您的 (MySQL) 性能问题与缺少/不正确的索引和/或格式不正确的查询有关...... ??

标签: mysql arrays bash


【解决方案1】:

显示列 = 145 和行 = 155 的循环中所有文件的值

使用 GNU awk:

gawk 'FNR == 155 { print $145; nextfile }' *.txt

翻译:对于每个文件的第 155 行,打印第 145 列并跳到下一个文件(为了提高效率,避免读取文件中的更多行)。将 *.txt 替换为适当的 shell 通配符模式以匹配您的所有输入文件。

作为bash 循环这些值的一部分:

while read -r value; do
    # something
done < <(gawk 'FNR = 155 { print $145; nextfile }' *.txt)

根据 shell 变量(rowcol)而不是硬编码值来创建行和列:

gawk 'FNR == row { print $col; nextfile }' "row=$row" "col=$col" *.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    • 2022-11-30
    • 2015-09-07
    • 2010-11-06
    • 1970-01-01
    相关资源
    最近更新 更多