Bash: 여러 파일에서 지정된 열의 가장 높은 값을 가진 행을 선택하고 가장 높은 값을 가진 행을 포함하는 출력 파일을 만듭니다.

Bash: 여러 파일에서 지정된 열의 가장 높은 값을 가진 행을 선택하고 가장 높은 값을 가진 행을 포함하는 출력 파일을 만듭니다.

아래와 비슷한 이름을 가진 파일이 포함된 디렉토리가 있습니다.

mi001
mi002
...
mi034
...

제가 하고 싶은 것은 14열에서 가장 높은 값을 찾는 것입니다. 그런 다음 가장 높은 값을 가진 전체 줄을 출력 파일에 추가하고 싶습니다. 최종 결과로 각 원본 파일의 맨 위 줄이 포함된 출력 파일이 필요합니다.

샘플 파일

c1 c2 ... c14 c15
1 ... 5 0.5
2 ... 4 0.9

답변1

간단한 방법은 파일을 정렬하고 각 파일에서 마지막 줄을 선택하는 것입니다. 예를 들어,

for file in mi*
do
    sort +13 -n $file | tail -1
done > result

+13열 14를 정렬하여 -n번호 순서대로 정렬합니다.

그래도 작동하지 않으면 +13정렬 문을 다음으로 바꿀 수 있습니다.

sort -k14,14 -n $file | tail -1

답변2

제공한 희박한 정보에 따라 awk다음과 같이 작동합니다(공백 또는 탭으로 구분된 필드 가정).첫 번째 행의 제목):

awk 'NR == 2 {totmax=$14 ; maxline=$0 ; filemax[FILENAME]=$14 ; fileline[FILENAME]=$0}
     FNR>1 && $14 > totmax {maxline=$14; totmax=$14}
     FNR>1 && ($14 > filemax[FILENAME] || !filemax[FILENAME]) {filemax[FILENAME]=$14 ; fileline[FILENAME]=$0 }
     END {print "line with total maximum:\n"maxline
          print "maximums for files:"
          for (file in filemax) {print file":",fileline[file]}}' mi*

관련 정보