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



这是我的第一篇文章,我对bash编码还很陌生。我们在我工作的地方运行了一些实验,为了在gnuplot中绘制它,我们需要在Result中添加一个反应标签。

我们有一个看起来像这样的文件:

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

和一个结果文件(对不起,我现在无法访问),其中显示的文件的第一列是相同的,后面跟着多个值。它们的顺序不一样。现在,我想循环遍历Result文件,获取第一列的值,在显示的文件中搜索它,并将reactionlabel附加到该行。

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

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

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

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

编辑:我还写了一个脚本,从一个看起来像这样的文件转到:

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. 如何在文件中执行剪切命令?比如,我代表sed。我的解决方法非常难看,因为它在当前目录中创建了另一个文件

谢谢:)

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

使用awk,它将类似于:

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

将其保存在一个名为reactions.awk的文件中,然后调用awk -f reactions.awk shownfile resultfile

awk  '{a[$1]=a[$1]$2} END{for (i in a){print i,a[i]}}' file1 file2

相关内容

  • 没有找到相关文章

最新更新