공백으로 구분 된 열 A 및 B의 값 목록을 추가하고 합계 결과 표시 [중복]
라는 파일이 fold.txt
있습니다. 각 행에는 공백으로 구분 된 두 개의 값이 있습니다. 첫 번째 값이 A 열을 나타내고 공백 뒤의 두 번째 값이 B 열이라고 말하면 A 열의 모든 값과 B 열의 모든 값을 어떻게 추가하고 각 열의 합계를 개별적으로 표시 할 수 있습니까?
나는 다음과 같은 것을 기대하고 있습니다.
$ cat fold.txt
100 500
200 300
700 100
산출:
Total count Column A = 1000
Total count column B = 900
답변
와 함께 awk
:
awk '{ sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
print "Total count column B = " sum_B +0;
}' infile
텍스트 처리를위한 도구 인 awk 언어 에서 $1
첫 번째 열의 값을 $2
나타내며 두 번째 열의 값을 나타내며 $3
세 번째 등 의 경우 특수한 하나 NF
는 마지막 열 Id를 나타내며 따라서 마지막 열의 $NF
값입니다. $2
위도 함께 $NF
; 그리고 예 NF
, 마지막 열 ID가 언제 인지 파악 하므로 변수 값은 얼마나 많은 열이 있는지 알려줍니다 (각 줄에 대한 값 업데이트는 입력에서 읽습니다).
입력 파일이 비어 있고 여전히 숫자 출력을 얻는 경우를 처리하기 위해 awk
숫자 결과를 출력 하도록 강제하는 결과에 0을 추가 합니다.
기본적으로 스페이스 / 탭을 사용 awk
하는 FS
변수 ( F eild S eparator )로 구분되는 열 (또는 필드) . 열을 다른 문자로 분할하려면 다음과 같은 -F
옵션을 사용하여 재정의 할 수 있습니다 awk
.
awk -F'<character-here>' '...' infile
또는 다음 BEGIN{...}
과 같은 블록 내에서 FS
:
awk 'BEGIN{ FS="<character-here>"; }; { ... }' infile
예를 들어 아래와 같은 입력 파일의 경우 (이제 공백 대신 쉼표입니다) :
100,500
200,300
700,100
awk
다음과 같이 코드를 작성할 수 있습니다 .
awk -F',' '{ sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
print "Total count column B = " sum_B +0;
}' infile
또는 BEGIN
블록 내에서 :
awk 'BEGIN{ FS=","; }; { sum_A +=$1; sum_B+=$2; };
END{ print "Total count Column A = " sum_A +0;
print "Total count column B = " sum_B +0;
}' infile
약간 복잡하고 다음 샘플에서 입력 파일의 N 열을 모두 합산합니다 .
100,500,140,400
200,300,640,200
700,100,400,130
그래서 우리는 NF
첫 번째 단락에서 이야기 했습니다 (NF 값은 얼마나 많은 열이 있는지 알려줍니다 (각 줄마다 업데이트)).
awk -F',' '{ for (i=1; i<=NF; i++) sum[i]+=$i; };
END{ for (colId in sum) {
printf ("Total count Column: %d= %d\n", colId, sum[colId] );
};
}' infile
여기서 유일한 새로운 점은 awk
배열을 사용 하여의 값에서 가져온 동일한 열 Id를 처리하고 i
해당 값 $i
을 해당 배열에 추가했습니다 (이 배열의 인덱스 / 키는 열 ID입니다). 그런 다음 END{...}
블록에서 표시된 키에 대한 배열을 반복 한 다음 먼저 열 Id를 인쇄 한 다음 그 옆에있는 항목의 합계를 표시하면 아래와 같은 출력이 표시됩니다.
Total count Column: 1= 1000
Total count Column: 2= 900
Total count Column: 3= 1180
Total count Column: 4= 730
DC에게는 좋은 일입니다.
dc는 먼저 fold.txt에서 데이터를 읽은 다음 sum_col_dc에서 코드를 읽습니다.
다음과 같이 사용하십시오 : dc fold.txt sum_col_dc
cat sum_col_dc
[lB+sBlA+sAz0<C]sC[lGLElDnnnp]sH[Total count Column ]sD[B]sE[A]SE[ = ]sGlCxlAlHxlBlHx
좀 더 자세한 정보 :
[lB+sBlA+sAz0<C]sC
[lGLElDnnnp]sH
[Total count Column ]sD
[B]sE
[A]SE
[ = ]sG
lCx
lA
lHx
lB
lHx
DC를 즐기십시오
.