我需要检查一个变量中特定列的每一行中的数字与另一个变量中两个特定列中的所有行的对比awk
,并在第一个变量中保留满足参数的行。
到目前为止,我尝试通过一个强大的awk
命令来执行此操作都失败了。我显然可以在外部循环中执行此操作,但它会非常慢,因为我有 100 条数千行要检查。我感谢解决这个问题的任何和所有帮助,我一直在寻求改进我对 awk 的使用,所以如果你有一个解决方案,最好有一个解释,这样我就可以学习和提高自己。
这是一个例子:
假设我只想打印第 2 列中的行
${ListToCheckFrom}
,如果数字有 > 第 2 列和 < 第 3 列中的任何行${ListToCheckAgainst}
输入示例:
ListToCheckFrom="C,2 C,22 C,12 hr,15" ListToCheckAgainst="C1,25,50 hr1,22,30 r,12,18 C,15,44"
预期输出:
C,22 hr,15
由于您已用 标记问题
bash
,因此您可以使用进程替换来读取 shell 变量,如输入文件。以下脚本片段应该这样做:这将指定作为第一个输入文件的'd 内容,以及
echo
作为第二个输入文件的 'd 内容。它将在“打开”每个文件之前或之前设置一个变量,以便在内部区分当前正在处理哪些“文件”。$ListToCheckAgainst
echo
$ListToCheckFrom
awk
list
constr
chk
awk
$ListToCheckAgainst
,它只是将第 2 列和第 3 列中指定的“下”和“上”界限分别存储在数组low
和high
中。除此之外,它会立即跳过处理到下一个输入行。$ListToCheckFrom
,它会扫描之前注册的所有范围,如果发现第 2 列在其中任何一个范围内,则打印它(并立即跳过处理到下一个输入行)。如果您的数据存储在“物理”文件而不是 shell 变量中,您可以简单地使用文件名而不是进程替换作为命令行参数。