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%