这是我的第一篇文章,我对bash编码还很陌生。我们在我工作的地方运行了一些实验,为了在gnuplot中绘制它,我们需要在Result中添加一个反应标签。
我们有一个看起来像这样的文件:
G135b CH2O+HCO=O2+C2H3
R020b 2CO+H=OH+C2O
R021b 2CO+O=O2+C2O
和一个结果文件(对不起,我现在无法访问),其中显示的文件的第一列是相同的,后面跟着多个值。它们的顺序不一样。现在,我想循环遍历Result文件,获取第一列的值,在显示的文件中搜索它,并将reactionlabel附加到该行。
如何循环遍历结果文件的所有行并获取临时变量中第一列的值?我想这样使用这个变量:
grep -r '^$var' shownfile | awk '{print $2}'
(返回如下:CH2O+HCO=O2+C2H3)
如何将该行的结果附加到结果文件中?
编辑:我还写了一个脚本,从一个看起来像这样的文件转到:
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
- 如何在文件中执行剪切命令?比如,我代表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