Awk 修改和比较两个文件的相似性

Awk 修改和比较两个文件的相似性,awk,file-manipulation,Awk,File Manipulation,我有两个文件。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 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 9

我有两个文件。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
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
file2的示例值如下所示:

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
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最后一列中的值是不相关的):

此外,需要修改文件2,并使用以下值创建文件4(文件2最后一列中的值不相关):


创建文件3和文件4之后,我打算使用diff实用程序检查它们的相似性。为了生成file3和file4,我试图编写一个
awk
脚本。但是作为
awk
的初学者,我发现这项任务非常耗时。非常感谢您的指导。

我们可以从第一行的
$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
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

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

awk 'n!=$1 { i++ } { print i,$2 } { n=$1 }'
例如,你可以做:

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
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