여러 파일의 줄 빈도를 계산하는 방법은 무엇입니까?

여러 파일의 줄 빈도를 계산하는 방법은 무엇입니까?

나는 많은 (즉 >> 2) 텍스트 파일을 가지고 있습니다. 파일은 대부분 유사하지만 약간의 차이가 있습니다. 이 파일에서 가장 자주 발생하는 줄을 찾고 싶습니다. 예를 들어, 다음은 내가 찾고 있는 정보 유형입니다(저는 데이터에만 관심이 있으며 특정 형식이 필요하지 않습니다).

$ cat file1
line1line1line1
line2line2line2
line3line3line3
$ cat file2
line1line1line1
line2line2line2
$ cat file3
line1line1line1
line3line3line3
$ cat file4
line4line4line4
$ my_awesome_script file{1,2,3,4}
count | line
------+----------------
    3 | line1line1line1
    2 | line2line2line2
    2 | line3line3line3
    1 | line4line4line4

유사한 작업을 수행할 수 있는 몇 가지 일반적인 도구가 있지만 몇 가지 제한 사항이 있습니다.

  • comm- 한 번에 두 개의 파일만 비교할 수 있습니다. 두 파일 모두에 나타나지 않는 줄은 삭제됩니다.
  • grep -f- 일치하지 않는 라인을 폐기
  • grep -c- 일치하는 개수를 계산하지만 파일당 총 개수를 출력하고 일치하는 입력 패턴에 대한 정보를 삭제합니다.

명확히 하기 위해, 한 줄이 파일에 여러 번 나타나는 경우 단일 일치 항목으로만 계산합니다. 나는 이 줄이 총 몇 번 나타나는지 아니라 얼마나 많은 파일에 나타나는지에만 관심이 있습니다.

답변1

다음과 같은 작업이 원하는 작업을 수행해야 합니다.

#! /bin/sh
for f in ./file*; do
    sort -u "$f"
done | \
    sort | \
    uniq -c | \
    sort -rn | \
    head -40

목적 for은 각 파일의 각 행이 한 번만 계산되도록 하는 것입니다. 나머지 파이프라인의 초점은 발생 횟수를 계산하는 것입니다.

관련 정보