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 に答える