一 .cut
这里以/etc/passwd文件里的内容来演示
将用户名切割打印出来:
cat /etc/passwd | cut -d : -f 1
这里按:分割
二.grep
cat a | grep -n for
将a文件里有for的行号打印出来
last | grep -v byl
将不包含byl的检索出来
三.sort
cat /etc/passwd | sort -t : -k 3 -n
这里按:分割,且取第三个段,按纯数字由小到大排列
last | grep -v “wtmp” | grep -v “^$” | cut -d " " -f 1 | uniq -c | sort -n
这个是检索除了wtmp除了^$(空格)的登录信息
然后将检索的信息按空格切割取第一部分,然后去重并显示出重复的次数
最后在按纯数字排序
last | grep -v “wtmp” | grep -v “^$” | cut -d " " -f 1 | uniq -c | sort -n | awk ‘{printf("%s %d\n",$2,$1)}’
在加上这awk命令就可以把字符串和数字顺序进行调整,里面就像c语言的函数一样
四.tee
cat a | tee b
在屏幕显示信息的同时将文件里的内容复制到另一个文件中
五.split
split -l 10 a
将文件里的内容按行分为10份
ls /etc/ | split -l 10
将目录下的文件按行分为10份,这里就只是将/etc/下的文件按照字符串传给管道,再按字符串传出来
六.xargs
这里就相当于将管道里的文件传给xargs,这样file作用的对象是所有文件就不是管道了
七.tr
下面这两行命令是完全等价的
这个是将标准输入的内容替换,并输出,并不会改变文件里的内容
cat a | tr -s -c ‘a-zA-Z’ ‘\n’ | sort | uniq -c | sort -n -r
find . -name “*.c” | xargs cat | tr -s -c ‘a-zA-Z’ ‘\n’ | sort | uniq -c | sort -n -r | head -10
读取文件中排名前十的高频词汇
linux三剑客之二awk命令
上面的第一步严格来说是执行awk后面的赋值语句,然后才是后面三步
BREGIN语句再读取文件内容时就已经执行,所以如果不需要读取文件而打印时可以只要该语句
按分割符分割的块变量指令$n只能在单引号内使用
eval `cat /etc/passwd |awk -F : -v sum=${sum} -v cnt=${cnt}
'{ if($3 < 100) {++cnt ; sum+=$3;}}
END {printf("sum=%d\navg=%d\n", sum,sum/cnt)}'`
这里的eval可以让输出的等式文本用作shell命令赋值语句
这样就可以实现将awk里变量的值传到外部
“sum=${sum} "
-v cnt={cnt}” 是将shell里的变量传到awk里面
sed--------文本流编辑
数据提取练习题
1.有两种方法
2.有两种方法
echo ${PATH} | tr “:” “\n” | tail -1
先将路径打印出来给管道,再将管道里的内容的:替换为\n换行符,换行的内容给管道,tai就可以从管道里打印出最后一行内容
echo ${PATH} | rev | cut -d : -f 1 | rev
先将路径打印出来给管道,再将管道里的内容反过来再传入管道,然后再用cut将管道里的内容按:切取第一段,给管道,然后再将管道里的内容反过来
3.
cat /etc/passwd | cut -d : -f 1 | sort
这个是只有用户信息输出
cat /etc/passwd | sort -t : -k 1
这个还是会将全部信息输出
cat /etc/passwd | head -n 20 | tail -n 10
cat /etc/passwd | head -n 20 | tail -n 10 | cut -d : -f 1 | xargs -n 1 id
10
cat /etc/passwd | cut -d : -f 1 | xargs -n 1 -esync
cat a.txt | tr -s " " “\n” | sort | uniq -c | sort -n -r
cat >> a.txt << xxx
这个的意思是从终端输入进去的被重定向附加到文件a.txt直到输入xxx时停止