我有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 <的最后一列中的值/ em>无关紧要):
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
创建 file3 和 file4 后,我打算使用 diff 实用程序检查它们的相似性。要生成 file3 和 file4 ,我正在尝试编写awk
脚本。但作为awk
的初学者,我发现这项任务非常耗时。任何指导都将不胜感激。
答案 0 :(得分: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