2017-12-03 28 views
0

내 입력 파일에서 특정 라인을 추출하려고 가진 값으로 라인을 따기 :높은 값

2.txt 
1 10 11 A L X3 -1.1 
1 10 11 A L X3 -21.1 
1 10 11 A L X1 1.1 
1 13 21 A T X3 -2.1 
3 11 12 A T X2 -3.1 
3 11 12 K T X2 7.1 
4 11 12 A T X7 -8.1 
4 11 12 C T X7 -8.1 
4 11 12 C T X7 11.1 
4 11 12 C T X7 -11.1 
4 11 12 C T X1 -11.1 
4 11 12 C T X7 41.1 

내가 처음 5 열을 공유하는 선을 추출하기 위해 노력하고 있지만, 지난 두 다른 오전 또한 처음 5 개 항목을 공유하지 않는 다른 항목도 있습니다.

그런 다음 마지막 열의 절대 값이 가장 높은 라인을 유지하려고합니다. glenn jackman에 속하는 최소값을 가진 라인을 얻기위한 awk 코드를 가지고 있으며, 더 높은 절대 값을 가진 라인을 추출하기 위해 그의 솔루션을 향상 시키려고했지만, 작동하지 않았습니다.

내 예상 출력은 :

1 10 11 A L X3 21.1 
1 10 11 A L X1 1.1 
3 11 12 A T X2 3.1 
3 11 12 K T X2 7.1 
4 11 12 A T X7 8.1 
4 11 12 C T X7 41.1 

내 시험 AWK입니다

awk ' {key = $1 FS $2 FS $3 FS $4 FS $5} !(key in abs) || $NF < abs[sqrt(key^2)] {abs[key] = $NF; line[key] = $0} END {for (key in line) print line[key]}' 2.txt | sort 

음수에서 최소 음수와 라인 출력 (안 포지티브로해야) 및 최대 양수를 인쇄하지 않습니다.

1 10 11 A L X3 -21.1 
1 13 21 A T X3 -2.1 
3 11 12 A T X2 -3.1 
3 11 12 K T X2 7.1 
4 11 12 A T X7 -8.1 
4 11 12 C T X1 -11.1 

귀하의 도움에 감사드립니다 !!

답변

2

여기에 또 다른 방법

awk '{$NF=($NF<0)?-$NF:$NF}1' file | # take absolute value of last field 
sort -k1,5 -k7nr     | # sort by the key and numerical value desc          
awk '!a[$1,$2,$3,$4,$5]++'   # pick the first one (which is largest) 
+0

감사합니다 ..하지만 때로는 마지막 열 하강을 주문 나던이 코드입니다. 이유가 무엇일까요? – bapors

+0

'-k7nr'은 숫자로 내림차순으로 7 번째 필드에 대한 것이지만 첫 번째 행은 키 (처음 5 개 필드)로 정렬되고 첫 번째 항목은 선택됩니다 (항상 같은 키에 대해 가장 커야합니다). 최종 결과는 예제에서와 같이 마지막 필드별로 정렬되지 않습니다. 아마도 내가 예를 들어 데이터를 명확하게 이해할 것이라고 오해했을 것입니다. – karakfa

+0

나는이 문제를 발견했다. 0.002는 0.002가 총 4 자리이며 0.19는 3이된다. – bapors