txt 파일에 있는 열의 최대값과 최소값을 변수로 출력하는 방법

txt 파일에 있는 열의 최대값과 최소값을 변수로 출력하는 방법

txt 파일에 있는 열의 최대값과 최소값을 변수로 인쇄하는 방법은 무엇입니까?

abc.txt:

col1 col2
1    35
1    20
1    40
1    50

최대값과 최소값을 식별하는 코드를 작성했습니다.

cut -f2 -d "" abc.txt|head -1
cut -f2 -d "" abc.txt|tail -1
v1 = 'echo <??>|cut -f2 -d "" abc.txt|head -1'
v2 = 'echo <??>|cut -f2 -d "" abc.txt|tail -1'

하지만 변수에 넣을 수는 없고 루프에서 사용해야 합니다. 나는 모든 줄을 인쇄하기 때문에 읽는 동안 줄을 쓰지 않을 것입니다.

답변1

이를 수행하는 방법에는 여러 가지가 있습니다. Ainar-G처럼 Awk를 사용하겠습니다.

$ cat abc.txt 
col1  col2
1 35
1 20
1 40
1 50

다음은 "col" 패턴이 포함된 행을 무시하고 파일의 두 번째 열을 가져온 다음 숫자를 정렬합니다.

$ min=$(awk '!/col/ {print $2}' abc.txt | sort -nr | tail -1)
$ max=$(awk '!/col/ {print $2}' abc.txt | sort -nr | head -1)

$ echo "$min"
20

$ echo "$max"
50

답변2

awk 프로그램:

FNR == 1 { next; }

FNR == 2 { max = min = $2; next }

{
    if ($2 > max) {
        max = $2; 
    } else if ($2 < min) {
        min = $2;
    }
}

END { printf("max: %d, min: %d\n", max, min); }

용법:

$ awk -f ./tmp.awk ./tmp.txt
max: 50, min: 20

답변3

데스크탑 계산기를 사용하여 수학 연산을 수행할 수도 있습니다.직류Linux의 유틸리티. 스택의 데이터에 대해 작동합니다. ? 명령을 사용하여 행을 읽으면 피연산자(공백으로 구분됨)가 스택에 배치됩니다. 여기에는 레지스터에 저장된 명령을 재귀적으로 호출하는 작업이 포함됩니다. 자세한 내용은 gnu dc 매뉴얼을 참조하세요.

$ if="abc.txt"
$ declare -a a=($(< "$if" tr x- x_ | sed 1d | dc -e "
[q]sq [sMd]sa [sNd]sb
[?z0=qddlM<adlN>bcz0=?]s?
?c ?dsMsN cl?x lMlNf"))
$ min=${a[0]} max=${a[1]}
$ echo "min:$min nax:$max"

min:20 max:50

관련 정보