![更改unix中文本文件的输出格式](https://linux22.com/image/141037/%E6%9B%B4%E6%94%B9unix%E4%B8%AD%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E7%9A%84%E8%BE%93%E5%87%BA%E6%A0%BC%E5%BC%8F.png)
如何更改 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
另外,我可以使用哪个 unix 命令来计算 Count 和 Count2 的百分比以获得以下输出。
预期输出:(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%