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
它工作正常!谢谢 – alloppp
由于输出重定向右侧的括号表达式是未定义的行为,因此在某些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}''。 –