循环遍历表并将该表的信息附加到另一个文件

时间:2016-06-01 08:48:39

标签: linux bash loops sh

这是我的第一篇文章,对于bash编码我是一个新手。 我在我工作的地方运行了一些实验,并在gnuplot中绘制它,我们需要在结果中添加一个反应标签。

我们有一个如下所示的文件:

G135b   CH2O+HCO=O2+C2H3
R020b   2CO+H=OH+C2O
R021b   2CO+O=O2+C2O

和一个Result文件(我现在无法访问,抱歉),其中显示的文件的第一列是相同的,后跟多个值。它们的顺序不一样。 现在我想循环遍历Result-file并获取第一列的值,在显示的文件中搜索它并将反应标签附加到该行。

  1. 如何遍历生成的文件的所有行并获取临时变量中第一列的值? 我想像这样使用这个变量:

    grep -r '^$var' shownfile | awk '{print $2}'
    

    (回馈如下:CH2O + HCO = O2 + C2H3)

  2. 如何将该行的结果追加到结果文件中?

  3. 编辑:我还写了一个脚本,来自一个看起来像这样的文件:

    G135b : 0.178273 C H 2 O + H C O = O 2 + C 2 H 3

    到此:

    G135b CH2O+HCO=O2+C2H3

    是:

    #!/bin/bash
    file=$(pwd)
    cd $file
    # echo "$file"
    cut -f1,3 $file/newfile >>tmpfile
    sed -i "s/://g" tmpfile
    sed -i "s/ //g" tmpfile
    cp tmpfile newfile
    
    1. 如何在文件中执行cut命令?喜欢-i for sed。我的解决方法非常难看,因为它在当前目录中创建了另一个文件。
    2. 谢谢:)

3 个答案:

答案 0 :(得分:0)

join命令可以在这里工作,它将在每个第一列的两个文件上执行内连接(默认情况下)。

$ cat data
G135b   CH2O+HCO=O2+C2H3
R020b   2CO+H=OH+C2O
R021b   2CO+O=O2+C2O

$ cat result_file
G135b   a b c
R020b   a b
R021b   a b x y z

$ join data result_file
G135b CH2O+HCO=O2+C2H3 a b c
R020b 2CO+H=OH+C2O a b
R021b 2CO+O=O2+C2O a b x y z

答案 1 :(得分:0)

使用awk,它将类似于:

NR == FNR { data[$1] = $2; next; }
{ print $0 " " data[$1]; }

将其保存在名为reactions.awk的文件中,然后拨打awk -f reactions.awk shownfile resultfile

答案 2 :(得分:0)

spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/