LinuxBash,如何从另一个文件中添加两行
在Ubuntu上工作,使用bash 我有两个文件。文件1包含原子及其在空间中位置的列表,如下所示:LinuxBash,如何从另一个文件中添加两行,linux,bash,Linux,Bash,在Ubuntu上工作,使用bash 我有两个文件。文件1包含原子及其在空间中位置的列表,如下所示: Si 1 14 24.094049488113697 22.249517320000000 5.4091803780000000 Si 2 14 -21.980209241886303 23.466150130000000 -6.4407518510000000 Si 3
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
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
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非常相似,但包含更多信息。除了名称和位置外,它还包含有关速度和力的信息。看起来是这样的:
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
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
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
我的问题是:文件1有正确的坐标,但没有所需的其他信息(速度和力)。如何从每个原子(第3和第4行、第7和第8行、第11和第12行等)中提取两行,并将它们插入相应原子的坐标下,以便输出如下所示:
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
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
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中分离出来,然后尝试将它们添加到第一个文件的坐标之下。不幸的是,我还没有找到这样做的方法
多谢各位
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检查我们是否在第一个文件中
是吗?保存数组中的下一行
没有?我们在第二个文件中
(a中的$0)检查数组中是否存在标题行(文件1中的atom=文件2中的atom)
是吗?打印所有内容:)
输入:
文件1
文件2
输出:
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
编辑:添加了输出并告诉了我到目前为止所做的尝试。谢谢你的回答Joda。我无法使用您提供的代码获得任何输出。通过删除($0 in a)部分,我得到了输出,但它只是从第二行开始每隔四行删除一行。所以我得到的不是si14xyyzz而是:si14yyzz