열 1의 날짜를 기준으로 열의 고유 값 개수를 찾습니다.

열 1의 날짜를 기준으로 열의 고유 값 개수를 찾습니다.

쉼표로 구분된 참조 필드가 3개 있습니다.

last crawled,linking page,domain
"Nov 17, 2018","https://allestoringen.be/problemen/bwin/antwerpen","allestoringen.be"
"Aug 11, 2017","http://casino.linkplek.be/","linkplek.be"
"Nov 17, 2018","http://pronoroll.blogspot.com/p/blog-page_26.html","pronoroll.blogspot.com"
etc

날짜 필드에서 중복 항목을 제거하고 각 고유 날짜(열 $2)에 대해 고유하게 연결된 페이지 수와 해당 고유 날짜(열 $3)에 대한 고유 도메인 수를 찾아야 합니다. 나는 시도했다:

awk '{A[$1 OFS $2]++} END {for(k in A) print k, A[k]}' FPAT='([^,]*)|("[^"]+")' file
awk '{A[$1 OFS $3]++} END {for(k in A) print k, A[k]}' FPAT='([^,]*)|("[^"]+")' file

하지만 한 번에 3개의 열을 모두 얻는 것이 약간 혼란스럽습니다.

답변1

# script.awk

BEGIN {
    FPAT = "[^\"]+"
}

{
    # the first if is to avoid processing title row and rows that do not contain fields
    if (NF > 1) {
        # the third field is the linking page column; the second field is a comma
        if ($3 != "" && $1 $3 in unique_linking_pages == 0) {
            unique_linking_pages[$1 $3]
            unique_linking_page_counts[$1]++
        }
        # the fifth field is the domain column; the fourth field is a comma
        if ($5 != "" && $1 $5 in unique_domains == 0) {
            unique_domains[$1 $5]
            unique_domain_counts[$1]++
        }

        # in case of empty fields in columns 2 and or 3 of the input file,
        # this ensures that all the dates are recorded
        dates[$1]
    }
}

END {
    printf "Date, Unique Linking Page Count, Unique Domain Count\n"
    for (date in dates)
        output = output date " | " unique_linking_page_counts[date] " | " unique_domain_counts[date] "\n"

    system("column -t -s '|' <<< '" output "'")
}

관련 정보