Grep 使用Xargs从控制台读取输入

Grep 使用Xargs从控制台读取输入,grep,xargs,Grep,Xargs,这是我写的剧本 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
在使用
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…

另一种方法是通过管道传输数据,例如:

script1 fileA | script2 fileB

这种方法允许您传递更多参数,并通过fileB进行流式传输

如果FileA中的数据是每行一个RID,那么明显的选择是(经典的)或(使用更现代的符号)。POSIX在2004年版本中未标准化
fgrep
(将其替换为
grep-F
)。然而,
fgrep
有很长的血统;它是第7版UNIX的一部分™ 例如,大约在1978年

fgrep -f FileA FileB
grep -F -f FileA FileB
如果FileA中的数据不是“每行一个RID”格式,请这样做


但fgrep是否从控制台读取i/p

如果您告诉它,它会这样做,但您不希望它从控制台读取;您希望它从标准输入中读取“控制台输入”大致意思是“您正在键入”。(也就是说,我使用
grep-F-F-/etc/passwd
检查了
grep-F
的行为,然后在“控制台”(终端)上键入
/bin/
,然后指示EOF。它工作正常。)

如果您使用的是
bash
,则可以使用“流程替换”来获得所需的结果:

grep -F -f <(zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2) FileB

在此上下文中,单破折号表示“从标准输入读取”;这是命令的常见约定。它在MacOSX10.7.4上运行良好;很有可能它在其他地方也会起作用。

您能否从文件a和文件B中给出几行,并具体说明您希望在shell中提供什么输入?到目前为止,您的脚本看起来像什么?FileA有多大?那是多少行?如果只有几个(比如说,一千个以下),那么就有一组选项可用;如果较大,则选项较少。另外,RID只是文件A每行上多个字段中的一个字段,还是每行上只有一个数据?实际上,文件A的大小超过了千。关于文件1的RID输出,应该是09877326369900 92828282828 0202929202。这是文件A的三个输出。现在我需要获取文件B的相应行,该行具有文件A的输出。。。为此,我需要从控制台本身读取文件A的输出,而不是将其存储在临时文件中。第二个脚本如何从第一个脚本接收一个接一个的输入?这是我编写的脚本zgrep-I xxxx FileA | grep-o“RID=[0-9 | A-Z]*“|uniq | cut d”=”-f2 | xargs在使用xargs点之前,我的o/p是0198289321398231212-RID 1 32103213213-RID 2 32103213213343-RID 3 32103213251261-RID 4对于这里存在的每个RID,在文件B中都有一个对应的行。我计划在zgrep-I xxxx文件a | grep-o“RID=[0-9 | a-Z]*“| uniq | cut-d”之后执行以下操作-f2 | xargs |{文件B中的grep RID1,文件B中的grep RID2,文件B中的grep RID3,文件B中的grep RID4}现在我唯一的问题是如何用xargs引用RID1,2,3,4…我已经编辑了这个问题。。请看一下,为了更好的形成,伙计们,我已经找到了答案。。。我们可以使用以下xargs-0-I字符串zcat XXXXX | agrep-dEOE字符串。。因此,xargs将在每行一个RID中逐个传递值。。。但fgrep是否从控制台读取i/p这是我编写的脚本zgrep-i xxxx FileA | grep-o“RID=[0-9 | A-Z]*”| uniq | cut-d”=“-f2 | xargs在使用xargs点之前我的o/p是0198289321398231231231213-RID 2 3210321321213343-RID 3 32103213251261-RID 4对于这里的每个RID,在文件B中有一个对应的行。我计划在zgrep-I xxxx文件a | grep-o“RID=[0-9 | a-Z]*“| uniq | cut-d”=“-f2 | xargs |{文件B中的grep RID1,文件B中的grep RID2,文件B中的grep RID3,文件B中的grep RID4}现在我唯一的问题是我将如何引用RID1,2,3,4与RGS…我编辑了这个问题。。请看一下,以获得更好的格式
zgrep -i xxxx FileA | grep -o "RID=[0-9|A-Z]*" | uniq | cut -d "=" -f2 |
grep -F -f - FileB