我正在尝试从join命令返回的行中获取特定属性。我将枪口压缩两个文件(不保存到磁盘)然后对它们进行连接的代码是:
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|'
-t $'|'是因为* .gz文件由'|'分隔而不是空白。我可以用:
awk 'BEGIN {FS="|"};{print $1}'
要正常获取每一行的第一个字段,但我不确定join是否以批处理或每行输出返回的匹配...如果是每行,我如何暂停它以获取第一个属性并执行比较(例如是否继续查看更多行)?
感谢任何建议。
答案 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}'