我有以下数据名为atp.csv file
Date_Time,M_ID,N_ID,Status,Desc,AMount,Type
2015-01-05 00:00:00 076,1941321748,BD9010423590206,200,Transaction Successful,2000,PRETOP
2015-01-05 00:00:00 077,1941323504,BD9010423590207,351,Transaction Successful,5000,PRETOP
2015-01-05 00:00:00 078,1941321743,BD9010423590205,200,Transaction Successful,1500,PRETOP
2015-01-05 00:00:00 391,1941323498,BD9010500000003,200,Transaction Successful,1000,PRETOP
我使用下面的命令来计算结果..
cat atp.csv|awk -F',' '{print $4}'|sort|uniq -c
输出低于。
3 200
1 351
但我想在表格视图中输出此输出..希望将此数据显示为表格视图。有可能??
答案 0 :(得分:0)
是的,有可能,这样一个简单的例子:(见答案末尾的注释)
echo "3 200\n1 351"|awk -v t=7
'NR==1{for(i=1;i<=t*NF+NF+1;i++)printf "-";print ""}
{
for(i=1;i<=NF;i++){
if(i==1)printf "|";
fmt="%"t"s|"
printf fmt, $i
}
print ""
}
END{for(i=1;i<=t*NF+NF+1;i++)printf "-";print ""}'
此输出
-----------------
| 3| 200|
| 1| 351|
-----------------
如果您更改-v t=20
,则会输出:
-------------------------------------------
| 3| 200|
| 1| 351|
-------------------------------------------
如果你想在每一行之后加一行,也就是每个单元格的边框:
kent$ echo "3 200\n1 351"|awk -v t=20
'NR==1{for(i=1;i<=t*NF+NF+1;i++)printf "-";print ""}
{
for(i=1;i<=NF;i++){
if(i==1)printf "|";
fmt="%"t"s|"
printf fmt, $i
}
print ""
for(i=1;i<=t*NF+NF+1;i++)printf "-"
print ""
}'
-------------------------------------------
| 3| 200|
-------------------------------------------
| 1| 351|
-------------------------------------------
-v t=**
定义每个单元格的宽度,可以做得更好*(见下一项)t
值才能使用此脚本。这可以做得更好,(我没有这样做)。您可以处理文件/输出两次,首先查找最长的字段,以便我们可以动态获取t
。 t
),您可以在第一轮获取每列中最长的字段,这样可以使列宽不同。