我已经被合理地分配了这个提示我的第一个真正的NSString *docFolder = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [docFolder stringByAppendingPathComponent:@"jorg.csv"];
NSData *myData = [NSData dataWithContentsOfFile:path];
程序,我甚至不知道从哪里开始。任何帮助入门将非常感激。
编写一个名为awk
的awk程序,该程序读取数字文件并打印出现的直方图。对于下面显示的输入:
hist.awk
输出将是:
1
4
5
0
2
4
6
8
1
3
2
4
6
7
2
3
3
4
4
第一列包含文件中的数字。第二个包含该数字发生的次数。图表显示总数的百分比,缩放为50,因此50个星号表示100%,25个星号表示50%,依此类推。
答案 0 :(得分:4)
请问您可以尝试关注awk
并告诉我这是否对您有所帮助(虽然我仍然不确定您的*
输出中的打印):
awk 'function astrick_printing(var){;num=val=count="";count=((var*100)/50);while(++num<=count){val=val "*"};return val;} {a[$0]++} END{for(i in a){print i,a[i],astrick_printing(a[i])}}' Input_file | sort
现在添加上述解决方案的非单一衬里形式:
awk '
function astrick_printing(var){
num=val=count="";
count=((var*100)/50);
while(++num<=count){
val=val "*"};
return val
}
{
a[$0]++
}
END{
for(i in a){
print i,a[i],astrick_printing(a[i])}
}
' Input_file | sort
输出如下:
0 1 **
1 2 ****
2 3 ******
3 3 ******
4 5 **********
5 1 **
6 2 ****
7 1 **
8 1 **
答案 1 :(得分:2)
另一个awk
$ awk '{a[$1]++; c++}
END{for(k in a)
{s=sprintf("%*s",a[k]*50/c,FS);
gsub(FS,"*",s);
print k":", a[k], s}}' file
0: 1 **
1: 2 *****
2: 3 *******
3: 3 *******
4: 5 *************
5: 1 **
6: 2 *****
7: 1 **
8: 1 **
答案 2 :(得分:2)
以下awk
行执行请求:
*
的字符串,只打印所需的部分。它使用格式说明符.ws
执行此操作,其中w
替换为int(a[i]*50/c+0.5)
。该脚本显示:
awk 'BEGIN{imin=+999999;imax=-99999;
stars="**************************************************"
}
{a[$1]++;imin=$i<imin?$i:imin; imax=$i>imax?$i:imax}
END{ for(i=imin;i<=imax;i++)
printf "%3d: %-4d %.*s\n",i,a[i],int(a[i]*50/NR+0.5),stars
}' file.txt
和输出:
0: 1 ***
1: 2 *****
2: 3 ********
3: 3 ********
4: 5 *************
5: 1 ***
6: 2 *****
7: 1 ***
8: 1 ***
一切都基于printf
format modifiers。要打印的格式为
%3d: %-4d %.*s\n
其中包括:
%3d
)打印宽度为3的整数-4d
)打印宽度为4左对齐的整数%.*s
)是%.ws
的变体,表示打印字符串的第一个w
字符。 w
的值(由*
表示)从参数列表中获取。如果您不关心列表中没有出现的数字(例如,您的文件有10
但不是9
,那么上面会有一行9: 0
作为输出。如果您不关心这一点,那么您可以这样做:
awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_num_asc"
stars="**************************************************" }
{a[$1]++}
END{ for(i in a)
printf "%3d: %-4d %.*s\n",i,a[i],int(a[i]*50/NR+0.5),stars
}' file.txt
需要PROCINFO["sorted_in"]="@ind_num_asc"
来确保有序遍历a
的索引。但这是一个gawk
extension。