1.sort排序
- 参数
-f:忽略大小写;
-b:忽略每行前面的空白部分;
-n:以数值型进行排序,默认使用字符串排序;
-r:反向排序;
-u:删除重复行。就是 uniq 命令;
-t:指定分隔符,默认分隔符是制表符;
2.uniq
- 参数
-c, --count //在每行前加上表示相应行目出现次数的前缀编号
-d, --repeated //只输出重复的行
-D, --all-repeated //只输出重复的行,不过有几行输出几行
-f, --skip-fields=N //-f 忽略的段数,-f 1 忽略第一段
-i, --ignore-case //不区分大小写
-s, --skip-chars=N //根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符
-u, --unique //去除重复的后,全部显示出来,根mysql的distinct功能上有点像
3.seq
seq : 按顺序打印一些数字
基本用法: seq [选项] ...尾数
seq [选项] ...首数 尾数
seq [选项] ...首数 增量 尾数
例: seq 1 2 10 输出1~10之间的奇数
seq 2 2 10 输出1~10之间的偶数
seq 10 -2 1 输出10~1之间的偶数
4.RANDOM
5.wc
wc 统计行数、单词数、字节数
-l:统计行数
-c:统计字节数
-w:统计单词数
-m:统计字符数
6.cut
cut命令:提取文件内容中指定的字段(列)、字符内容。单词的默认分隔符为空格。
-b:按照字节切,utf-8编码中每个汉字占3个字节
-c:按照字符切 -d:指定分隔符
-f:指定以分隔符为分割的哪个字段
例:cut -d : -f 1,6 /etc/passwd
显示文件中以:分割的第1和第6列的内容
cut -d : -f 1,3-5 /etc/passwd�显示文件中以:分割的1,3,4,5列内容
cut -d : -f -3 /etc/passwd
显示文件中前三列内容
cut -d : -f 3- /etc/passwd
显示文件第三列到最后一列的内容
cut -c 1-3 /etc/passwd 取每行的前三个字符
echo ‘欢迎光临’ | cut -b 1-6 取前六个字节‘欢迎’
7.rev
rev命令将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
8.awk利用索引合并文件
https://www.jianshu.com/p/63122e7fb79e
9.column 命令
作用:格式化列显示
参数:
-c 字符数 指定显示的列宽
-s“ 分隔符 “ 使用-t选项时,指定分隔符(允许指定多个分隔符)
-t 判断输入行的列数来创建一个表。分隔符是使用在-s中指定的字符。如果没有指定分隔符,默认是空格
# df -h | column -t
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 3.9G 12M 3.9G 1% /run
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root 27G 6.0G 22G 22% /
/dev/sda1 1014M 137M 878M 14% /boot
tmpfs 797M 0 797M 0% /run/user/0
10.while read逐行读取多列
while read a b c
do
echo -e "姓名:$a\t身份证:$b\t手机号码:$c"
done<userName.txt
或者
cat userName.txt |while read a b c
do
echo -e "姓名:$a\t身份证:$b\t手机号码:$c"
done
11.for逐行读取多列
count=1
for a in `awk '{print $1}' userName.txt`
do
b=`awk 'NR=='$count'{print $2}' userName.txt`
c=`awk 'NR=='$count'{print $3}' userName.txt`
echo -e "姓名:$a\t身份证:$b\t手机号码:$c"
let count++
done
两种方法的区别可以借鉴:
https://www.jianshu.com/p/2ede30dcfc6f
重定向符号的使用:
&>: 重定向标准输出或错误输出至同一个文件(或者2>&1)
扩展使用:
https://mp.weixin.qq.com/s/ImH0gfse6BrXoiNJart3Wg
11.遍历文件每行每列
测试文件
cat >list.txt<<EOF
安琪拉 88
白起 99
老夫子 78
火舞 89
妲己 99
狄仁杰 76
典韦 67
韩信 87
刘邦 56
刘禅 76
鲁班 78
墨子 88
孙膑 83
孙尚香 83
孙悟空 94
项羽 83
亚瑟 92
周瑜 91
EOF
参考脚本:
test.sh
#!/bin/bash
i=0
for name in `cat list.txt|awk '{print $1}'`
do
let i++
grade=`awk 'NR=='$i'{print $2}' list.txt`
echo -e "名字:$name \t 成绩:$grade"
done
执行脚本:
# sh test.sh
名字:安琪拉 成绩:88
名字:白起 成绩:99
名字:老夫子 成绩:78
名字:火舞 成绩:89
名字:妲己 成绩:99
名字:狄仁杰 成绩:76
名字:典韦 成绩:67
名字:韩信 成绩:87
名字:刘邦 成绩:56
名字:刘禅 成绩:76
名字:鲁班 成绩:78
名字:墨子 成绩:88
名字:孙膑 成绩:83
名字:孙尚香 成绩:83
名字:孙悟空 成绩:94
名字:项羽 成绩:83
名字:亚瑟 成绩:92
名字:周瑜 成绩:91