2

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

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

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

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

要正常获取每行上的第一个字段,但我不确定 join 是否将返回的匹配作为批次或每行输出......如果是每行,我该如何暂停它以获取第一个属性并进行比较(比如是否继续看多行)?

任何建议表示赞赏。

4

1 回答 1

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)并且您试图停在标记处或之外(即任何数字 >= 100 都是有效标记),请使用以下命令:

marker=100
join <(gunzip -c fileA.gz) <(gunzip -c fileB.gz) -t $'|' | awk -F '|' '{print; if ($1>='"${marker}"') exit}'
于 2013-04-04T17:47:56.973 回答