Unix에서 텍스트 파일의 출력 형식 변경 [닫기]

Unix에서 텍스트 파일의 출력 형식 변경 [닫기]

유닉스에서 텍스트 파일의 출력 형식을 변경하는 방법은 무엇입니까?

이러한 텍스트 파일을 처리하려면 Unix 명령이 필요합니다.

현재 출력: (ABC.txt)

Day Count
10 210
11 112
12 275
13 120
Day Count2
10 105
12 118
15 119

예상 출력: (XYZ.txt)

Day Count Count2
10   210   105
11   112    0
12   275   118
13   120    0
15    0    119

또한 다음 출력을 얻기 위해 Count 및 Count2의 백분율을 계산하는 데 사용할 수 있는 unix 명령은 무엇입니까?

예상 출력: (XYZ1.txt)

Day Count Count2 Percentage
10   210   105      50%
11   112    0        0%
12   275   118      43%
13   120    0        0%
15    0    119      100%

감사해요,

답변1

나는 작은 awk스크립트를 만들었습니다:

awk '
{
    if ( $1 == "Day" )
        c=$2;
    else
        v[$1][c]=$2;
    next;
} END {
    print "Day","Count","Count2","Percent";
    for (day in v)
    {
        c1=(!(v[day]["Count"]) ? 0 : v[day]["Count"]);
        c2=(!v[day]["Count2"] ? 0 : v[day]["Count2"]);
        p=(c1>0 ? c2/c1*100 : 100);
        printf("%s %s %s %.0f%%\n",day,c1,c2,p);
    }
}
' ABC.txt | column -t

출력을 파일로 보내려면 > XYZ1.txt끝에 추가하면 됩니다.

답변2

날짜를 발생 순서대로 표시하려면 RoVo의 제안을 다음과 같이 수정해 보세요.

awk -v"MN=1E100" '
$1 == "Day"     {c = $2
                 next
                }
                {v  [$1+0, c] = $2
                 if ($1 < MN) MN = $1
                 if ($1 > MX) MX = $1
                }
END             {C1 = "Count"
                 C2 = "Count2"
                 print "Day", C1, C2, "Percent";
                    for (i=MN; i<=MX; i++)      {T1 = v[i,C1] + 0
                                                 T2 = v[i,C2] + 0
                                                 PC = (T1>0?T2/T1:1)*100
                                                 if (T1 || T2) print i, T1, T2, PC "%" 
                                                }
                }
' OFS="\t" CONVFMT="%.0f" file
Day Count   Count2  Percent
10  210     105     50%
11  112     0       0%
12  275     118     43%
13  120     0       0%
15  0       119     100%

관련 정보