这是我写的脚本
zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs
在使用xargs
之前,我的o / p是
01982893213982312 - RID 1
32103213213213213 - RID 2
32103213213213343 - RID 3
32103213213251261 - RID 4
对于此处存在的每个RID,文件B中都有相应的行。我打算在以下内容之后执行以下操作:
zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 | xargs|
{grep RID1 in file B, grep RID2 in file B,grep RID3 in file B, grep RID4 in file B}
现在我唯一的问题是我将如何使用xargs引用RID1,2,3,4 ....
答案 0 :(得分:0)
另一种方法是管道数据,如:
script1 fileA | script2 fileB
这种方法允许您传递更多参数,并通过fileB ..
进行流式传输答案 1 :(得分:0)
如果FileA中的数据是每行一个RID,那么明显的选择是(经典)fgrep
或(使用更现代的表示法)grep -F
。在2004版本中,POSIX未标准化fgrep
(将其替换为grep -F
)。但是,fgrep
有很长的血统;例如,它是大约1978年第7版UNIX™的一部分。
fgrep -f FileA FileB
grep -F -f FileA FileB
如果FileA中的数据不是“每行一个RID”格式,那就这样做吧!
但fgrep是否从控制台读取了i / p
如果您告诉它,但您不希望它从控制台读取;你希望它从标准输入读取。 “控制台输入”意味着“你打字”,粗略。 (也就是说,我使用grep -F
检查grep -F -f - /etc/passwd
的行为,然后在'控制台'(终端)上键入/bin/
,然后指示EOF。它工作正常。)
如果您使用的是bash
,则可以使用“流程替换”来获得所需的结果:
grep -F -f <(zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2) FileB
进程替换运行<( ... )
内的命令,以便其输出转到'文件'(实际上,通常是/dev/fd
中的文件描述符),并且该命令被赋予命令({ {1}})作为常规文件名参数。
如果你没有使用grep
,你可以改用它(这也适用于bash
,甚至可能更好):
bash
在此上下文中,单独的短划线表示“从标准输入读取”;它是命令的通用约定。它在Mac OS X 10.7.4上运行良好;它也很有可能在其他地方发挥作用。