(1)、获取文件的总行数: wc datatxt 。可以得到文件的行数是 :10
(2)、因为我要分为三类,所以10/3=3,那么我取的行数就是1,3,6(这个行数可以自己选择,比如也可以直接去前三行 head -n 3 datatxt >centerstxt),然后使用如下命令:awk 'NR==1||NR==3||NR==6' datatxt > centerstxt,然后再把centerstxt上传到HDFS上就可以了。
(下面我使用的是前三行作为数据中心文件)
下面的程序中就不用设置要分 的类别和数据文件的维度数了,我在写这篇和前篇文章的时候参考了这篇文章:>
sed 可以实现 但sed不灵活
已测试
#!/bin/sed -n:next/^student:/{p:gettoendnp/^$/b nextb gettoend}
保存到文件codesed中 使用 sed -f codesed dattxt 就可以输出文件
但文件格式必须严格,每个 student以空白行作为结束,结束行内没有任何字符。建议增加一个关键字end 用来作为结束标记。
观察一 、先输出两个值,其中NF为awk正在处理记录(列)的字段 总数 ,$NF为每行 最后一个字段的值
观察二 、如下命令输出4个值,注意最后俩字段的值是怎么来的:S[LISTEN] ++S[LISTEN]
观察三 、利用awk的行处理特性,遍历了所有tcp开头的行
定义出不同状态命名的数组下标,并分别++计数赋值给数组元素,最后打印$NF和数组S[$NF]的值
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
用来统计tcp各个状态连接数的shell脚本
>
awk是一个文本处理工具,通常用于处理数据并生成结果报告
语法格式
第一种形式
语法格式解释
BEGIN正式处理数据之前
pattern匹配模式
{commands}匹配命令,可能多行
END处理完所有匹配数据后执行
第二种形式
内置变量含义
$0整行内容
n当前行的第1-n个字段(按照指定分隔符分割后)
NF(Number Field)当前行的字段个数,也就是多少列
NR(Number Row)当前行的行号,从1开始计数
FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始
FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割
RS(Row Separator)输入行分割符。默认回车\n
OFS(Output Field Sepatator)输出字段分割符。默认为空格
ORS(Output Row)输出行分隔符。默认为回车
FILENAME当前输入的文件名字
ARGC命令行参数个数
ARGV命令行参数数组
需要指定分隔符:
不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)
showtxt文件内容如下
输出如下:
输出如下
可以用这个输出每一行的最后一列的值
输出如下(没有混合使用,例子比较简单)
showtxt的文件内容如下
先输出每一行数据
输入如下
输出每一行的第二列
输出如下
在上面基础上指定行分隔符
输出如下
再次指定列分隔符
输出如下
showtxt的文件内容如下
输入如下,因为是对行进行处理,所以有几行,输出几次文件名
jps -l输入如下,运行的服务如下
想关闭mbase-spider-10jar这个jar包的服务,可以写一个如下脚本,非常方便,更高阶用法另开一篇文章好好写写
#假设c源文件后缀都为c
find -name c -print|xargs cat -b |tail -1|awk '{print $1}'
或者
find -name c -print|xargs cat|sed '/^$/d'|wc -l
试试看对不对。1年多没碰了,手上也没有环境测试。
awk:用于一行中分成数个“字段”来处理。适合处理 小型数据。
运行模式:awk '条件类型1{动作1} 条件类型2{动作2} ' filename。
# last | awk '{print $1 "\t" $3}' <== 查看登录者的数据,只显示登录名和ip地址,并以[tab]隔开
awk 的内置变量。
变量名称 代表的含义
NF 每一行($0)拥有的字段总数
NR 当前 awk 所处理的是 “第几行” 数据
FS 当前分隔符,默认空格键
awk 的逻辑运算符
特点
AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据 *** 作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。
使用awk的内置函数split,将第三个字段根据分隔符“-”分割并存入数组,最后跟随$1和$2逐个打印。
$ echo "aaa 3 1-2-3-4-5" | awk '{n=split($3,a,"-");for(i=1;i<=n;i++)print $1,$2,a[i]}'aaa 3 1aaa 3 2aaa 3 3aaa 3 4aaa 3 5
以上就是关于如何用hadoop实现k-means全部的内容,包括:如何用hadoop实现k-means、awk怎样提取匹配行的下几行,下几行的行数要大于一、【shell】对一条常用命令(netstat结合awk统计TCP连接数)的理解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)