从连接命令中的gunzipped文件中捕获一行

时间:2013-04-04 15:00:48

标签: bash unix join gunzip

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

join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|'

-t $'|'是因为* .gz文件由'|'分隔而不是空白。我可以用:

awk 'BEGIN {FS="|"};{print $1}'

要正常获取每一行的第一个字段,但我不确定join是否以批处理或每行输出返回的匹配...如果是每行,我如何暂停它以获取第一个属性并执行比较(例如是否继续查看更多行)?

感谢任何建议。

1 个答案:

答案 0 :(得分:1)

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

这将输出行,直到第一个字段等于$ marker的值,然后停止。

如果您想要输出带标记的行,请使用grep:

join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | grep "^${marker}|"

<强>更新
如果您的标记是一个整数(例如,100)并且您试图在标记处停留或超出标记(即任何数字&gt; = 100是有效标记),请使用:

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