![2개의 주석 파일에서 3개의 열을 일치시키고 해당 행을 새 출력 파일에 인쇄합니다.](https://linux55.com/image/77789/2%EA%B0%9C%EC%9D%98%20%EC%A3%BC%EC%84%9D%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%203%EA%B0%9C%EC%9D%98%20%EC%97%B4%EC%9D%84%20%EC%9D%BC%EC%B9%98%EC%8B%9C%ED%82%A4%EA%B3%A0%20%ED%95%B4%EB%8B%B9%20%ED%96%89%EC%9D%84%20%EC%83%88%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%9D%B8%EC%87%84%ED%95%A9%EB%8B%88%EB%8B%A4..png)
2개의 파일이 있는데 파일 1과 파일 2의 열 번호가 동일합니다. 첫 번째 열에는 염색체 번호가 있고, 두 번째 열에는 프로모터 시작 사이트가 있으며, 세 번째 열에는 프로모터 중지 사이트가 있습니다.
파일 1의 세 열 모두에 대해 파일 2에서 일치하는 항목이 발견되면 두 파일을 모두 일치시키고 싶습니다. 정확히 3개와 4개의 열을 표시하는 출력 파일을 생성하고 싶습니다. 네 번째에는 점수가 1인 일치 항목과 점수가 0인 불일치 항목이 표시됩니다.
파일 1:
chr1 899 1098
chr3 677 900
chr3 844 1045
파일 2:
chr3 844 1045
chr1 899 1098
chr4 500 789
결과물 파일:
chr1 899 1098 1
chr3 677 900 0
chr3 844 1045 1
chr4 500 789 0
파일과 일치하는 답변을 찾았고 동일한 포럼에서 새 파일을 출력했습니다.
awk 'FNR==NR{a[$1,$2,$3]=$0;next}{if(b=a[$1,$2,$3]){print b}}' file1 file2
하지만 출력 파일에 일치 및 불일치 점수 열도 포함하고 싶습니다.
답변1
스크립트
#!/bin/bash
filea=$1
fileb=$2
fout=$3
sed -i "/^$/d" $filea $fileb
cat $filea | while read a b c
do
grep "$a.*$b.*$c" $fileb &>/dev/null && l="$a $b $c 1" || l="$a $b $c 0"
grep "$l" $fout &>/dev/null || echo "$l" >> $fout
done
cat $fileb | while read a b c
do
grep "$a.*$b.*$c" $filea $fout &>/dev/null && l="$a $b $c 1" || l="$a $b $c 0"
grep "$l" $fout &>/dev/null || echo "$l" >> $fout
done
표준 출력
younes@cbfcdf:~$ cat filea
chr1 899 1098
chr3 677 900
chr3 844 1045
younes@cbfcdf:~$ cat fileb
chr3 844 1045
chr1 899 1098
chr4 500 789
younes@cbfcdf:~$ ./script filea fileb new_file
younes@cbfcdf:~$ cat new_file
chr1 899 1098 1
chr3 677 900 0
chr3 844 1045 1
chr4 500 789 0
younes@cbfcdf:~$