更改unix中文本文件的输出格式

更改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

另外,我可以使用哪个 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%

相关内容