ファイル1があります。
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 G
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA
ファイル2:
A1 4 A
A1 5 B
A1 6 T
A2 3 T
ファイル1のA2の行番号4、5、6、3をファイル2の値4、5、6、3に置き換えたいと思います。
新しいファイル 3 の期待される出力:-
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 B
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA
ファイル1には、ファイル1の列1(A1〜A13の値)の各値に対して100,000行があります。例だけを示しました。ファイル2にはファイル1の数行しか含まれておらず、ファイル2の列3の値が変更されます。
LinuxやPythonでこれを試してみたいです。実際、すでに誰かが答えを投稿しています。答えはとても良いです。
awkとpython qコマンドを試しましたが、問題を解決できませんでした。結果を取得するには時間がかかり、結果ファイルは0バイトです。
12時間そのままにしておきましたが、まだ結果は出ませんでした。
私の元のデータの数行
ファイル1
A01 1 C
A01 2 T
A01 3 A
A01 4 A
A01 5 A
A01 6 A
A01 7 C
A01 8 A
A01 9 C
A01 10 G
A01 11 C
A01 12 G
A01 13 G
A01 14 A
A01 15 T
A01 16 C
A01 17 C
A01 18 T
A01 19 T
A01 20 C
A01 21 G
A01 22 G
A01 23 G
A01 24 T
A01 25 C
A01 26 G
A01 27 G
A01 28 G
A01 29 T
A01 30 C
A01 31 G
.
.
.
A01 60534289 T
ファイル2
A01 905 T
A01 911 A
A01 922 C
A01 953 C
A01 967 T
A01 979 C
A01 1046 T
A01 1160 G
A01 1165 T
A01 1167 T
A01 1171 C
A01 1282 A
A01 1382 T
A01 1408 C
A01 1743 T
A01 1804 C
A01 3089 G
A01 3109 T
A01 3243 A
A01 3276 T
A01 3302 T
A01 3356 G
A01 3373 G
A01 3399 G
A01 3631 C
A01 3677 G
A01 3682 G
.
.
.
A01 605342 B
したがって、ファイル2のTが位置905にある場合
A01 905 T
ファイル1の位置905がBの場合
A01 905 B
file1があると仮定すると、別の位置値を変更するという意味で、他の位置値を変更せずにfile1の特定の位置でBをTに置き換える必要があります。
A01 10905 C
したがって、ファイル1のこの場所に対して10の場合にのみ905file2に他の文字がありますか?
答え1
まだここにコメントを追加できないので、ここに私のawk
解決策があります。ここ例 入力と出力についてテストしました。
cat file1 file2 | awk '
BEGIN { OFS = " " }
{ rows[$1 OFS $2] = $3 }
END { for (r in rows) print(r, rows[r]) }
' | sort -V >file3
この回答や投稿された他の回答を試しましたか?これで、予想外の実際の出力は何でしたか?答えがうまくいかない場合は、データファイルの種類に関する追加情報を提供することが役に立ちます。
答え2
Awk
解決策:
awk 'NR == FNR{ a[$1, $2] = $3; next }
($1, $2) in a{ $3 = a[$1, $2] }1' file2 OFS=' ' file1
出力:
A1 1 NA
A1 2 NA
A1 3 NA
A1 4 A
A1 5 B
A1 6 T
A1 7 NA
A1 8 NA
A1 9 NA
A2 1 NA
A2 2 NA
A2 3 T
A2 4 NA