아래와 같이 두 개의 파일이 있습니다.
file1
:6:66893424_T_C -0.5985 rs151222586 -0.0351 rs12364336 -0.0030 rs57502521 0.0099
file2
:6:66893424_T_C 0.5985 rs151222586 -0.0351 rs12364336 0.003 rs57502521 -0.0099
제 생각에는:
- 2열에서 동일한 기호(빼기 기호 또는 더하기 기호)가 있는 행 찾기
- 기호 일치를 위해 열 1 항목 목록을 만듭니다.
- 일치하는 항목이 없는 열 1 항목의 목록을 만듭니다.
제 생각에는:
- 일치하는 출력은
rs151222586
- 그리고 비교할 수 없는 출력
6:66893424_T_C rs12364336 rs57502521
답변1
두 번째 필드를 네 번째 필드와 비교할 수 있도록 +awk 파일을 나란히 붙여넣습니다.
paste file1 file2 |
awk '
$2&&$4 {
print $1 > ($2*$4>0?"match":"unmatch")
}
'
결과는 파일의 일치 및 불일치입니다.
답변2
여러 입력 파일을 처리하는 것은 자질구레한 일이며 데이터를 단일 파일로 축소하면 더 쉬울 것입니다. 예 paste
를 들어 join
다음과 같이 할 수 있습니다.
$ paste file1 file2
6:66893424_T_C -0.5985 6:66893424_T_C 0.5985
rs151222586 -0.0351 rs151222586 -0.0351
rs12364336 -0.0030 rs12364336 0.003
rs57502521 0.0099 rs57502521 -0.0099
$ join -j1 file1 file2
6:66893424_T_C -0.5985 0.5985
rs151222586 -0.0351 -0.0351
rs12364336 -0.0030 0.003
rs57502521 0.0099 -0.0099
전자는 올바른 순서를 얻는 데 의존합니다. 두 경우 모두 파일이 서로 일치하지 않는지 확인해야 합니다.
paste
다른 기호로 서명된 항목을 사용하여 출력 :
$ paste file1 file2 | awk '($2 >= 0) != ($4 >= 0) {print $1}'
6:66893424_T_C
rs12364336
rs57502521
>=
계산 결과는 1
또는 0
이므로 !=
비슷한 방법을 사용하여 비교 결과를 비교합니다. 나는 임의로 0을 양수로 정렬하기로 결정했습니다. ==
등호 에도 비슷하게 사용됩니다 .
또한 기호 함수를 명시적으로 정의할 수도 있습니다.
$ paste file1 file2 | awk 'function sign(x) { return x >= 0 ? +1 : -1; }
sign($2) != sign($4) {print $1}'
6:66893424_T_C
rs12364336
rs57502521
답변3
두 파일에 대해 한 줄씩 작업을 수행할 수 없으므로 awk
일정량의 버퍼링이 필요합니다. 파일이 충분히 작으면 작동합니다.
awk 'NR==FNR{v[$1]=$2; next}
{if ($2*v[$1]>=0) {print $1 > "matched"} else {print $1 > "unmatched"}}' file1.txt file2.txt
- 를 읽을 때
file1.txt
"레이블"-"값" 쌍만 배열에 기록되고v
실행은 다음 입력 줄로 점프합니다. 각 파일 라인 카운터가 글로벌 라인 카운터와 동일한 지 확인하여 처리 중인지file1.txt
여부를 구분합니다 . 동일하면 첫 번째 파일을 처리하는 중입니다.file2.txt
FNR
NR
- 을 읽을 때
file2.txt
현재 행의 "값" 부분과 해당 값을 곱한 값이file1.txt
0인지 양수인지 확인합니다. 그렇다면 해당 부호는 동일하며 "레이블" 부분은 파일에 출력됩니다matched
. 음수인 경우 부호가 동일하지 않으며 "레이블" 부분이 파일에 출력됩니다unmatched
.
결과:
~ > cat matched
rs151222586
~ > cat unmatched
6:66893424_T_C
rs12364336
rs57502521
노트
- 나는 그것을 가정
+0
하고-0
등호를 갖는 것으로 간주됩니다. - 또한 한 파일에서는 열 2가 0이고 다른 파일에서는 0이 아닌 행이 없다고 가정합니다.