공백으로 구분 된 열 A 및 B의 값 목록을 추가하고 합계 결과 표시 [중복]

Dec 29 2020

라는 파일이 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

답변

5 αғsнιη Dec 29 2020 at 00:00

와 함께 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
ctac_ Dec 30 2020 at 01:56

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를 즐기십시오
.