2016-04-20 54 views
2

使用bash在Ubuntu上工作。Linux BASH,如何从另一个文件添加两行

我有两个文件。文件1包含一系列原子及其在空间中的位置,如下所示:

Si    1  14 
    24.094049488113697 22.249517320000000 5.4091803780000000 
Si    2  14 
-21.980209241886303 23.466150130000000 -6.4407518510000000 
Si    3  14 
-9.8193586518863060 -13.586795180000000 -14.608877780000000 

此文件继续,直到描述所有原子为止。

文件2非常相似,但包含更多信息。除名称和位置外,还包含有关速度和力量的信息。它看起来像这样:

Si    1 
    22.31756370   22.24951732   5.409180378  
    29.0968650481  -12.2276780157  -7.08186598428  
    30498.6028163  -9406.07172249  -27393.4141429  
Si    2 
    -23.75669503   23.46615013  -6.440751851  
    -28.7812217378  31.2316292200  -34.6050775946  
    40272.8675096  -40472.1160399  -1103.73416448  
Si    3 
    -11.59584444  -13.58679518  -14.60887778  
    13.5323597131  42.5618815724  8.79048959706  
    6758.60998012  -9418.56231552  3386.31657511 

我的问题是这样的:文件1具有正确的坐标,但不具有的信息,这是需要(速度和力)休息。我怎样才能采取两条线从每个原子(线3 & 4,7 & 8,11 & 12等),并且将它们插入对应的原子的坐标的下方,从而使输出看起来像这样:

Si    1  14 
    24.094049488113697 22.249517320000000 5.4091803780000000 
    29.0968650481  -12.2276780157  -7.08186598428 
    30498.6028163  -9406.07172249  -27393.4141429  
Si    2  14 
-21.980209241886303 23.466150130000000 -6.4407518510000000 
-28.7812217378  31.2316292200  -34.6050775946  
    40272.8675096  -40472.1160399  -1103.73416448 
Si    3  14 
-9.8193586518863060 -13.586795180000000 -14.608877780000000 
    13.5323597131  42.5618815724  8.79048959706  
    6758.60998012  -9418.56231552  3386.31657511 

(坐标是从第一个文件,但是速度和力量是从第二个)

我的方法是分开的两个从文件2想要的文件,然后尝试将它们添加坐标低于第一文件。不幸的是我还没有找到办法做到这一点。

谢谢。

+1

编辑:添加了产量,并告诉我已经试过这样远。 – Bdrs

回答

1
awk 'FNR==NR { getline a[$1$2]; next; } ($1$2 in a){ print $0; print a[$1$2]; getline; getline; print; getline; print }' file1 file2 

说明:

FNR == NR检查,如果我们在第一个文件

是吗?将下一行保存在数组中

否?我们在第二个文件中。

($ $ in a)检查数组中是否存在标题行(file1中的原子= file2中的atom)。

是吗?打印所有的东西:)

输入: 文件1

Si 1 14 
24 22 5 
Si 2 14 
21 23 6 
Si 3 14 
9 13 14 

文件2

Si 1 
x x x 
y y y 
z z z 
Si 2 
x x x 
y y y 
z z z 
Si 3 
x x x 
y y y 
z z z 

输出:

Si 1 14 
24 22 5 
y y y 
z z z 
Si 2 14 
21 23 6 
y y y 
z z z 
Si 3 14 
9 13 14 
y y y 
z z z 
+0

谢谢你的回答乔达。 我无法使用您提供的代码获取任何输出。通过删除($中的0) - 部分我得到一个输出,但它只是从第二行开始删除每四行。 所以不是 硅14 X X X Y Y Y Z Zž 我得到: 硅14 Y Y Y Z Zž – Bdrs

+0

现在工程:)非常感谢你! – Bdrs

相关问题