Bash 在join命令中捕获gunzipped文件中的一行

Bash 在join命令中捕获gunzipped文件中的一行,bash,unix,join,gunzip,Bash,Unix,Join,Gunzip,我试图从join命令返回的行中获取特定属性。我要压缩两个文件(不保存到磁盘),然后对它们进行连接的代码是: join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' 正常获取每行上的第一个字段,但我不确定join是批量输出还是每行输出返回的匹配项。。。如果是每行,我如何暂停它以获取第一个属性并进行比较(例如是否继续查看更多行) 任何建议都将不胜感激。marker=“foo” marker="foo" join <(gun

我试图从join命令返回的行中获取特定属性。我要压缩两个文件(不保存到磁盘),然后对它们进行连接的代码是:

join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|'
正常获取每行上的第一个字段,但我不确定join是批量输出还是每行输出返回的匹配项。。。如果是每行,我如何暂停它以获取第一个属性并进行比较(例如是否继续查看更多行)

任何建议都将不胜感激。

marker=“foo”
marker="foo"
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | awk -F '|' '{print; if ($1=="'"${marker}"'") exit}'
join=100是有效的标记),请使用以下方法:

marker=100
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | awk -F '|' '{print; if ($1>='"${marker}"') exit}'
marker=100

加入我,我不懂奎斯顿
join
逐行读取文件,这就是为什么需要对输入文件进行排序。我的问题是,一旦我的输出达到某个值,我该如何停止呢?嗯,这取决于你想做什么。通常,通过管道将
join
的输出连接到一个逐行比较的对象,而不暂停任何操作。我希望将该行的第一个属性与外部值(基本上是一个最大值变量)进行比较。我知道如何使用awk获取属性,但不知道如何获取每行输出。。。开球能行吗?命名管道?匿名管道?您的第一个代码片段更接近我要查找的内容,但它似乎并没有在$marker处停止…出现了一个错误,如果marker包含空格,它就会中断。除此之外,您可能未正确设置标记。编辑答案以修复空格问题。在设置标记时,我将代码中的“标记”替换为包含要匹配的值的变量名。。。仍然不起作用,你不能仅仅替换“标记”,它应该是一个变量。在my code:
marker=“text to stop at”
之前运行此命令,或者用文本替换
${marker}
。对,但问题是要匹配的值甚至不一定在第二个连接的文件中。例如,如果值为100,则我希望在读取$1中大于100的值后停止加入并退出。100可能不在那里,但如果101在那里,它应该在那里退出。这就是为什么我要使用大于运算符。如果$1中没有任何值大于或等于100,则应加入整个文件。本文的主要目的是通过设置一个最大值并仅在属性值上连接到该值,来修剪我们从这些连接的文件中获得的数据集。。。
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | grep "^${marker}|"
marker=100
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | awk -F '|' '{print; if ($1>='"${marker}"') exit}'