2012-09-18 8 views
0

텍스트 조작에 도움이 필요합니다.
이 같은 데이터를 수행가장 큰 값을 선택하고 줄을 인쇄하십시오.

29554 31109 "ENSG00000243485.1"1555
29554 31097 "ENSG00000243485.1"1543
29554 30039 "ENSG00000243485.1"485
30564 30667 "ENSG00000243485. 1 '103
30,267 30,667 "ENSG00000243485.1"400
30,976 31,109 "ENSG00000243485.1"133
89,295 133,566 "ENSG00000238009.2"44,271 89,295 120,932
"ENSG00000238009.2"31,637 01,238,007,316 27,552,314,960,453,210 120,775 120,932 "ENSG00000238009.2"157
112,700 112,804 "ENSG00000238009.2"104
92,091 92,240 "ENSG00000238009.2"149
28,269,867 28,269,929 "ENSG00000248451.1"62
28,270,383 28,270,486 "ENSG00000248451.1"103
28273195 28273372 "ENSG00000248451.1"177
28275308 28275354 "ENSG00000248451.1"46
.....................

I 가장 큰 것을 인쇄해야한다. 그룹당 가치.
4 열에 그룹 이름이 있고 5 열에 값이 있습니다.
이렇게 생각해야합니다 :
1. 서로 구분하는 그룹입니다.
2. 가장 큰 값 선택.
3. 전체 줄 인쇄.

는 예에 대한 바람직한

출력 같아야

29,554 31,109 "ENSG00000243485.1"
1,555 89,295 133,566 "ENSG00000238009.2"44,271
28,273,195 28,273,372 "ENSG00000248451.1"177

누군가 awk 또는 sed에서 나를 도와 줄 수 있기를 바랍니다.

답변

1

bashawk에서 수행해야합니다

GROUPS=$(cut -d' ' -f3 datafile | uniq) # list of groups 
for f in "$GROUPS" 
do 
    # print line if 4th field is max 
    awk -v "grp=$f" '$0 ~ grp && $4 > max {max=$4; line=$0} END {print line}' datafile 
done 
+0

불쌍하지만 작동하지 않습니다. 나는 가장 큰 가치가 인쇄 된 선을 얻고있다. 필자의 예에서는 다음과 같습니다. "89295 133566"ENSG00000238009.2 "44271" – PoGibas

+0

출력이 각 그룹에 대해 참으로 : 29554 31109 "ENSG00000243485.1"1555 89295 133566 "ENSG00000238009.2"44271 28273195 28273372 "ENSG00000248451.1"177 –

+0

그것은 작품! 감사.분명히 출력을 겹쳐 썼습니다. – PoGibas

1

이 당신을 위해 작동 될 수 있습니다

cat -n file | sort -k4,4 -k5,5nr | sort -u -k4,4 | sort -n | cut -f2- 
2

을 당신은 AWK로 한 번 파일을 통해 전달해야

awk ' 
    $4 > val[$3] {val[$3] = $4; line[$3] = $0} 
    END {for (grp in line) print line[grp]} 
' filename 
관련 문제