1

我有 2 个文件。file1的样本值如下:

1313 0 60
1313 1 60
1314 0 60
1314 1 57
1315 1 60
1316 0 60
1316 1 57
1317 1 57
1318 1 57
1333 0 57
1333 1 57
1334 0 60
1334 1 60

file2的样本值如下:

813 0 91
813 1 91
814 0 91
814 1 91
815 0 96
815 1 91
816 0 91
816 1 91
817 1 96
818 0 91
832 0 96
833 0 91
833 1 91
834 0 96

我正在尝试修改file1并使用以下值创建一个file3(如您所见,file1最后一列中的值无关紧要):

1 0 
1 1 
2 0 
2 1 
3 1 
4 0 
4 1 
5 1 
6 1 
21 0 
21 1 
22 0 
22 1 

另外,需要修改file2 ,创建一个file4,其值如下(file2最后一列的值无关):

1 0
1 1
2 0
2 1
3 0 
3 1
4 0
4 1
5 1
6 0
20 0
21 0
21 1
22 0

创建file3file4 后,我打算使用diff实用程序检查它们的相似性。要生成file3file4,我正在尝试编写一个awk脚本。但作为初学者awk,我发现这项任务非常耗时。任何指导将不胜感激。

4

1 回答 1

1

我们可以从第一行捕获值$1,然后在公式中使用它来计算偏移量。这假设最小$1的是在第一行。

awk 'NR==1 { i=$1 } { print $1-i+1,$2 }'

例如,您可以这样做:

awk 'NR==1 { i=$1 } { print $1-i+1,$2 }' file1 > file3
awk 'NR==1 { i=$1 } { print $1-i+1,$2 }' file2 > file4
diff file3 file4


这是我之前的版本,在我注意到您真的在寻找偏移量之前。我以为您只是想根据$1. 我们可以设置一个变量来检查行之间的值变化,并且只在$1变化时增加计数器。这假设是分组的。

awk 'n!=$1 { i++ } { print i,$2 } { n=$1 }'

例如,您可以这样做:

awk 'n!=$1 { i++ } { print i,$2 } { n=$1 }' file1 > file3
awk 'n!=$1 { i++ } { print i,$2 } { n=$1 }' file2 > file4
diff file3 file4
于 2015-05-23T15:19:44.753 回答