4개 열과 수천 개의 행에 다음 정보가 포함된 .txt 파일이 많이 있습니다.
chr10 73121691 18 SLC29A3
chr10 73121692 14 SLC29A3
chr10 73121693 10 SLC29A3
chr10 73120590 15 SLC29A3
chr10 73120591 15 SLC29A3
chr10 73120592 6 SLC29A3
chr10 12345678 25 COL1A1
chr10 12345679 8 COL1A1
chr10 12345680 6 COL1A1
chr17 48431036 5 LRP5
chr17 48431037 8 LRP5
chr17 48431038 5 LRP5
내가 원하는 출력은 다음과 같습니다.
chr10 73121691 - 73121693 , 14, SLC29A3
chr10 73120590 - 73120592 , 12, SLC29A3
chr10 12345679 - 12345680 , 13, COL1A1
chr17 48431036 - 48431038 , 6, LRP5
연속 숫자의 문자# 범위, 열 3의 평균, 범위와 연결된 이름입니다.
한 번에 여러 파일에 대해 이 작업을 수행하는 데 사용할 수 있는 스크립트가 있습니까?
감사해요
답변1
모든 생물정보학자가 필요로 하는 것데이터 통합그들의 툴킷에 :)
$ datamash -W groupby 1 min 2 max 2 mean 3 unique 4 < tmp/data.txt
chr10 73121691 73121693 14 SLC29A3
chr17 48431036 48431038 6 LRP5
명령줄 인수의 숫자는 열을 나타냅니다. 따라서 1열을 기준으로 그룹화하고 2열의 최소값과 최대값(범위), 3열의 평균, 4열의 해당 항목을 쉼표로 구분한 목록을 제공합니다.
답변2
귀하의 질문에 대한 답변에 따라 귀하가 원하는 것일 수도 있습니다.내 댓글:
$ cat tst.awk
$2 != (prev[2] + 1) {
if (NR > 1) {
prt()
}
split($0,beg)
sum = cnt = 0
}
{
split($0,prev)
sum += $3
cnt++
}
END { prt() }
function prt( ave) {
ave = (cnt ? sum / cnt : 0)
print prev[1], beg[2], "-", prev[2], "," ave ",", prev[4]
}
$ awk -f tst.awk file
chr10 73121691 - 73121693 ,14, SLC29A3
chr10 73120590 - 73120592 ,12, SLC29A3
chr10 12345678 - 12345680 ,13, COL1A1
chr17 48431036 - 48431038 ,6, LRP5