2015-05-23 90 views
1

我有2個文件。是文件1樣本值如下:是修改和比較兩個文件的相似度

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 

文件2樣本值如下:

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 

我想修改文件1並創建一個文件3與以下值(如您所見,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 

在創建了文件3文件4之後,我打算使用diff實用程序檢查它們的相似性。要生成文件3文件4,我正在嘗試編寫一個awk腳本。但作爲初學者到awk,我發現這項任務非常耗時。任何指導將不勝感激。

回答

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 
相關問題