이라는 파일이 있습니다 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
$NF
NF
입력 파일이 비어 있지만 여전히 숫자 출력을 얻는 극단적인 경우를 처리하기 위해 결과에 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에서 제공하는 더 많은 주문형 설명을 즐겨보세요 .