我有一个大文件,我需要从特定的行号中剪掉一部分字符串(最后三个值)。我必须将剪切线片段粘贴到另一个文件的另一行的末尾。大文件中的行看起来像这样:
33 X2_C(4) 0.2454 1.1280 0.0073 1.4926102 15.5148009 0.0724955
34 X2_C(5) 0.2487 1.2156 -0.0585 1.5876791 16.7196951 -0.5831547
35 X2_C(6) 0.2529 1.2191 -0.1998 1.7741292 16.7675608 -1.9922789
目前,我发现要获取最后三个数字,正则表达式应如下所示:
\-{0,1}\d[0-9]{0,2}\.\d[0-9]{4,6}\s+\-{0,1}\d[0-9]{0,2}\.\d[0-9]{4,6}\s+\-{0,1}\d[0-9]{0,2}\.\d[0-9]{4,6}
要修改的文件如下所示:
C(Fragment=1)
C(Fragment=2)
C(Fragment=2)
C(Fragment=1) 1.4926102 15.5148009 0.0724955
C(Fragment=2) 1.5876791 16.7196951 -0.5831547
C(Fragment=2) 1.7741292 16.7675608 -1.9922789
答案 0 :(得分:0)
$ awk 'NR==FNR{a[NR]=$(NF-2) OFS $(NF-1) OFS $NF; next} {print $0, a[FNR]}' file1 file2
C(Fragment=1) 1.4926102 15.5148009 0.0724955
C(Fragment=2) 1.5876791 16.7196951 -0.5831547
C(Fragment=2) 1.7741292 16.7675608 -1.9922789
答案 1 :(得分:-1)
这里是awk的一个,首先是我使用的测试文件:
$ cat file1
111 112 113 114
121 122 123 124
131 132 133 134
141 142 143 144
151 152 153 154
$ cat file2
211
221
231
241
awk:
$ cat program.awk
BEGIN {
n=split(from,from2,",")
m=split(to,to2,",")
if(n!=m)
exit
for(i in from2) {
from3[from2[i]]=i
to3[to2[i]]=i
}
}
NR==FNR {
if(FNR in from3)
from2[from3[FNR]]=$(NF-2) OFS $(NF-1) OFS $NF
next
}
(FNR in to3) {
$0=$0 OFS from2[to3[FNR]]
}1
使用它:
$ awk -v from="2,3,4" -v to="1,4,3" -f progran.awk file1 file2
211 122 123 124
221
231 142 143 144
241 132 133 134
使用参数from
和to
,您可以控制从哪些记录中读取最后三个字段(即,从特定行号 )以及它们的记录附加到-的顺序。