총 46개 열이 포함된 큰 텍스트 파일이 있습니다.
입력하다
Column1 Column2 ... Column46
17열부터 46열까지 반복되는 횟수를 열거하고 계산해야 합니다. 예를 들어:
내 파일은 다음과 같습니다.
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column19 Column20 Column21 Column22 Column23 ... Column46
Column17 Column18 Column20 Column22
Column18 Column20
Column20
원하는 출력:
1 Column17 - 2 times
2 Column18 - 3 times
3 Column19 - 1 time
4 Column20 - 4 times
5 Column21 - 0 times
6 Column22 - 2 times
7 Column23 - 1 time
" " - N times
29 Column46 - 1 times
내 awk 명령:
awk '{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' filelog.txt
실제 출력:
Column1 ... Column46
bla 1 blaN...3 bla 3
bla 3 blaN...2 bla 5
bla 7 blaN...4 bla 7
전체 파일에서 모든 문자열을 가져와서 반복되는 횟수를 계산합니다. 예를 들어:
Column1 //There are 54 lines, takes all words/strings of that column
bla 3 //The 3 and 4, is the number of repetitions.
bla 4
하지만 내 순서가 중요해모두열(에서1, 까지46) 그리고 각 문구 자체는 17에서 46 사이의 숫자입니다.원하는 출력내가 가진 것과 동일한 명령을 사용하여 이것을 만들 수 있는 방법이 있습니까? 아니면 다른 사람이 만들어야 하나요?
답변1
사용고양이명령하다-N열거형 옵션.
지정하고n=17거기에서 시작하고 싶기 때문입니다.
다음 명령을 사용하십시오.
cat -n <(awk '{n=17;if(NR==1)n=25;for(i=n;i<=NF;i++) a[$i]++} END{for(val in a) print val,a[val]}' filelog.txt)
답변2
귀하의 요구 사항을 올바르게 이해했다면 이것이 문제입니다.
{n=1;if(NR==1)n=25;for(i=n;i<=NF;i++) ...
첫 번째 레코드를 제외한 모든 레코드에 대해 을 설정한 n=1
다음 처음부터 모든 열을 처리합니다 n
. 하지만 실제로는 n=17
.