`sort | uniq -c`를 탭으로 구분하여 발생 횟수를 어떻게 만들 수 있나요?

`sort | uniq -c`를 탭으로 구분하여 발생 횟수를 어떻게 만들 수 있나요?

uniq -ccut나중에 분리하기 어렵도록 항목을 공백으로 구분합니다 awk.

1000_A1\tB1\n
___1_A2\tB2\n

sed -r 's/^ *([0-9]+)/\1\t/'구분 기호를 탭으로 변경하여 이 문제를 해결할 수 있었습니다. 그런 다음 cut -f1다음을 반환할 수 있습니다.

1000\tA1\tB1\n
1\tA2\tB2\n

uniq -c그러나 탭을 사용하여 숫자를 구분하는 것이 일반적인 사용법인 것 같습니다. 이 기능이 누락된 이유는 무엇입니까? 다른 더 쉬운 방법이 있나요?

답변1

귀하의 형식이 비슷한 것 같고 <number><space><field 1 name><tab><field 2 name>입력이 정렬되어 있는지 확인하고 싶습니다 field 1 name. 원하는 경우 초기 숫자 부분을 제거하고 첫 번째 열의 나머지 부분이 정렬되어 있는지 확인하세요.

echo "$input" | sed -r 's/^ *[^ ]+ //' | sort -c -k1,1

답변2

awk숫자를 구분하는 것이 왜 어렵다고 생각하는지 모르겠습니다 . awk '{print $1}'인쇄에는 문제가 없습니다.

$ sort file | uniq -c
      5 x
     10 y
$ sort file | uniq -c | awk '{print $1}'
5
10
$ 

답변3

컷을 이용하면 쉽게 분리할 수 있습니다. 그냥 cut -d " " -f 1번호를 얻고 cut -d " " -f 2-나머지를 얻으려면 그것을 사용하십시오. awk는 공간이기 때문에 처리만 합니다.

답변4

데이터 열에 공백이 포함될 수 있는 경우 sed탭을 사용하여 공백을 바꿀 수 있습니다.

sed -e 's/<5 white space chars>//' | sed -e 's/<1 white space chars>/\t/'

첫 번째는 sedswitch 에 의해 생성된 선행 공백을 대체하고 -c, 두 번째는 개수와 첫 번째 데이터 열 사이의 공백을 대체합니다.

관련 정보