2016-04-22 94 views
1

我想将一列从一个文件列7(即motherfile)放到多个文件的最后一列(即child1.c,chil2.c child3 .c和等)从一个文件中添加一列到多个文件的末尾

motherfile

38 WAT1 1 TIP3 OH2 OT -0.834000  15.9994   0 
    39 WAT1 1 TIP3 H1 HT  0.417000  1.0080   0 
    40 WAT1 1 TIP3 H2 HT  0.417000  1.0080   0 
    41 WAT1 2 TIP3 OH2 OT -0.834000  15.9994   0 
    42 WAT1 2 TIP3 H1 HT  0.417000  1.0080   0 

child1.c

 O  -5.689000  -0.628000  -10.423000 
     H  -6.663000  -0.744000  -10.224000 
     H  -5.166000  -1.340000  -9.957000 
     O  11.405000  3.612000  1.674000 
     H  11.331000  4.609000  1.663000 

child2.c

 O  -4.689000  -0.628000  -10.423000 
     H  -5.663000  -0.744000  -10.224000 
     H  -6.166000  -1.340000  -9.957000 
     O  1.4405000  3.612000  1.674000 
     H  14.331000  4.609000  1.663000 

等等...

我试图用

awk '{f1 = $0; getline<"motherfile"; print f1, $7}' <child1.c> newchild1.c 

但这只是函数将列添加到一个文件,我想把列了许多文件。

注意newchild.c需要像这样。

 O  -5.689000  -0.628000  -10.423000 -0.834000  
     H  -6.663000  -0.744000  -10.224000 0.417000 
     H  -5.166000  -1.340000  -9.957000 0.417000 
     O  11.405000  3.612000  1.674000 -0.834000 
     H  11.331000  4.609000  1.663000 0.417000 

回答

1

awk打印语句可以使用>>>redirected to a file。以下示例会将motherfile的第7列读入内存,并写入一个新文件,并用字符串new(包括保存的列)进行假装。

awk 'NR==FNR{a[FNR]=$7;next}{print$0,a[FNR]>"new"FILENAME}' motherfile 
    child1.c child2.c ... 
+0

它工作正常!谢谢 – alloppp

+1

由于输出重定向右侧的括号表达式是未定义的行为,因此在某些awk中会失败。你应该总是写'print $ 0,[FNR]>(“new”FILENAME)'而不是'print $ 0,[FNR]>“new”FILENAME'。另外,除非您使用GNU awk,否则每次更改输入文件时都需要关闭()以前的输出文件,以避免“同时打开太多文件”错误。因此,健壮的,可移植的脚本将是:'NR == FNR {a [NR] = $ 7; next} FNR == 1 {close(out); out =“new”FILENAME} {print $ 0,a [FNR]> out}''。 –

相关问题