A 열과 B 열에 공백으로 구분된 값 목록을 추가하고 합계를 표시합니다.

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

답변1

그리고 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

존재하다언어는 텍스트 처리 목적을 위한 도구로, $1첫 번째 열의 값을 표시하고, $2두 번째 열의 값을 표시하고, $3세 번째 열 등을 표시합니다. 특수한 도구 NF는 마지막 열의 ID를 표시하는 것입니다. 마지막 열의 값(그래서 위의 내용도 다음으로 바꿀 수 있습니다 $NF. 예, 마지막 열 ID일 때 캡처하므로 변수 값은 열 수를 알려줍니다(각 행에 대한 값 업데이트 awk 입력에서 읽습니다).$2$NFNF

입력 파일이 비어 있지만 여전히 숫자 출력을 얻는 극단적인 경우를 처리하기 위해 결과에 0을 추가하여 awk숫자 결과를 강제합니다.

열(또는 필드) awk은 변수 FS(에프일드에스구분 기호), 기본적으로 공백/탭을 사용합니다. 열을 다른 문자로 분할하려면 -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

좀 복잡해서 요약하자면질소다음 예의 입력 파일 열은 다음과 같습니다.

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

답변2

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에서 제공하는 더 많은 주문형 설명을 즐겨보세요 .

관련 정보