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:~$