유닉스에서 텍스트 파일의 출력 형식을 변경하는 방법은 무엇입니까?
이러한 텍스트 파일을 처리하려면 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%