在程序的输出列表中找到一个单词

时间:2014-06-14 06:57:46

标签: unix grep echo

我正在使用gromacs进行模拟。使用g_polystat工具会产生以下过程。

g_polystat

程序返回一个选项列表:

Select a group of polymer mainchain atoms:
Group     0 (         System) has  2669 elements
Group     1 (          Other) has    23 elements
Group     2 (           LnrB) has     5 elements
Group     3 (            Lnr) has    14 elements
Group     4 (           LnrE) has     4 elements
Group     5 (          Water) has  2646 elements
Group     6 (            SOL) has  2646 elements
Group     7 (      non-Water) has    23 elements
Select a group: 

程序要求选择所需的组并使用ENTER确认。

如果想要第2组,程序会自动化:

echo 2 | g_polystat

是否可以使用某些unix命令并在上面的输出列表中搜索单词,然后选择所需的组。

例如

  1. 找到你想要的词,让我们说水。像grep这样的东西可以完成这项工作
  2. 找到它所属的组的编号。在这种情况下,它的第5组
  3. 然后写

    回声5 | g_polystat

  4. 谢谢

1 个答案:

答案 0 :(得分:0)

...嗯

这不会这样做吗?

#### answer.sh
#!/bin/sh

sed -rn "s/Group[ ]*([0-9]*)[ ]*\([ ]*$1\)[ ]*has[ ]*[0-9]* elements/\1/gp" < /dev/stdin

然后像这样运行

./answer.sh Water < tableFile

打印

5

所以你可以像这样编辑代码:

sed -rn "s/Group[ ]*([0-9]*)[ ]*\([ ]*$1\)[ ]*has[ ]*[0-9]* elements/\1/gp" < /dev/stdin | {
    read num;
    echo $num;
    echo $num | g_polystat;
}

你显然需要在管道应用程序中进行一些空值检查,但对我来说似乎足够了