【问题标题】:Impty grep result in loopImpty grep 导致循环
【发布时间】:2013-02-01 09:10:36
【问题描述】:

我对 shell 脚本非常陌生,所以这可能很容易回答

我在一个程序中发现了一些有趣的基因,输出是数据文件 兴趣.txt

Nrg3
Srebf1
Cacna2d3
LOC100759725
LOC100761135
LOC100771217
LOC100769029

我有另一个数据文件 (unique_saml),其中包含大部分这些名称以及其他信息 例如

Nrg3    neuregulin_3    XM_003503005.1

所以我想编写一个脚本,它可以获取我的结果并从我的数据文件中 grep 其余数据

"#!/bin/sh
for ((  i = 0 ;  i <= 7; i++  ))
do  
cat interest.txt | head -$i | tail -1 | gawk '{print $1}' > tempname

name=`awk '{print $1 }' < tempname`

grep `echo $name` unique_saml >> results.txt
done

但是程序停止并且永远不会结束,因为在 unique_saml 文件中找不到 i = 4 = LOC100759725 = grep 返回空。

如何避免这种情况?

【问题讨论】:

    标签: linux file unix grep


    【解决方案1】:

    grep 可以使用-f 从文件中读取模式:

    $ grep -f interest.txt unique_saml
    Nrg3    neuregulin_3    XM_003503005.1
    

    如果您希望interest.txt 中的值仅匹配unique_saml 中的第一列:

    $ sed 's/^/^/' interest.txt | grep -f - unique_saml
    Nrg3    neuregulin_3    XM_003503005.1
    

    【讨论】:

      【解决方案2】:

      如果您想遍历文件 interest.txt 并添加更多信息(如果可用),您可以执行以下操作:

      cat interest.txt | while read line
      do
         echo -e "$line\t`grep $line unique_saml | awk '{print $2 "\t" $3}'`"
      done
      

      【讨论】:

        猜你喜欢
        • 2013-11-24
        • 1970-01-01
        • 2020-05-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-27
        • 2013-01-14
        • 2021-05-07
        • 2012-01-12
        相关资源
        最近更新 更多