cut、sort、tr、wc、head、tail

本文介绍了Linux环境下常用的命令,包括cut、sort、tr、wc、head和tail等,详细解释了这些命令的功能及用法,并提供了实际操作的例子。

cut 命令——简单的awk命令

参数 -d 指定分割符  -f 选取字段,每个字段用逗号分割

例: 

[root@localhost /]# cat /etc/passwd | cut -d ':' -f 1,6
root:/root
bin:/bin
daemon:/sbin
adm:/var/adm

-----------------------------------------------------------

sort命令:根据字段排序

-f 忽略大小写

-r 逆序排列

-n 以数字大小排序(默认以字符排序)

-t 设置分割符(默认以tab分割)

-u uniq,相同数据仅出现一行

-k 以那个区间来排序

例子:读取用户信息文档并按照第三列(用户ID顺序排列)

[root@bogon 桌面]# cat /etc/passwd |sort -t ':' -k 3 -n
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

--------------------------------------------------------------------------------------------

tr(translate缩写)主要用于删除文件中的控制字符,或进行字符转换。
语法:tr [–c/d/s/t] [SET1] [SET2]
SET1: 字符集1
SET2:字符集2
-c:complement,用SET2替换SET1中没有包含的字符
-d:delete,删除SET1中所有的字符,不转换
-s: squeeze-repeats,压缩SET1中重复的字符
-t: truncate-set1,将SET1用SET2转换,一般缺省为-t

例子:删除空白行
#删除空白行就是删除换行符\n
#注意:这些空白行上只有回车符,没有空格符
$ cat test.txt
I love linux!
                                                                                                                          
                                                                                                                          
Hello World!
                                                                                                                          
Shell is worthy to been studied

#这里用换行符的转义字符\n
#注意:此处用-s删除了多余的换行符,如果用-d,则会删除所有的换行符        

$ cat test.txt | tr -s "[\012]"
I love linux!
Hello World!
Shell is worthy to been studied      


例子:大小写切换

$ echo "Hello World I Love You" |tr [:lower:][:upper:]
HELLO WORLD I LOVE YOU   


例子:把文档中所有的cat替换成dog

tr "cat" "dog" < animanl.data  # 默认为 -t

使用tr字符串替换要注意一个问题,字符串的长度必须一致。假如 SET1长度小于SET2,SET2长度超出的字符会被丢弃,如果SET1长度大于SET2,则被替换的字符串只会部分被替换。 需要任意长度的字符串替换应使用sed。                                                                                       
-----------------------------------------------------------

wc 

 
wc 可以统计文件或I/O 流中的单词数量. 
wc -w 统计单词数量. 
wc -l 统计行数量. 
wc -c 统计字节数量. 
wc -m 统计字符数量. 
wc -L 给出文件中最长行的长度. 

[root@localhost bin]# wc  vm-support 
 323 1092 7702 vm-support     #323行,1092个单词,7792个字符
[root@localhost bin]# wc -l vm-support 
323 vm-support  
[root@localhost bin]# wc -w vm-support 
1092 vm-support


---------------------------------------------------------------------

head、tail只显示头、尾几行

[root@localhost etc]# head -n 3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@localhost etc]# tail -n 2 /etc/passwd
soso:x:502:50::/dev/null:/bin/false
ci:x:503:503::/home/ci:/bin/bash



#!/bin/bash # 简化版用户信息管理系统 CSV_FILE="users.csv" init_file() { if [[ ! -f "$CSV_FILE" ]]; then echo "用户名,密码,年龄,角色" > "$CSV_FILE" fi } # 随机密码生成(8-12位) generate_password() { local chars='A-Za-z0-9@#$%^&*_+' tr -dc "$chars" </dev/urandom | head -c $((RANDOM%5+8)) } add_user() { read -p "用户名: " username if grep -q "^$username," "$CSV_FILE"; then echo "错误:用户已存在!" && return 1 fi read -p "年龄: " age [[ ! "$age" =~ ^[0-9]+$ ]] && echo "错误:年龄无效!" && return 1 read -p "角色: " role password=$(generate_password) echo "$username,$password,$age,$role" >> "$CSV_FILE" echo "添加成功!密码: $password" } delete_user() { read -p "用户名: " username grep -v "^$username," "$CSV_FILE" > tmp && mv tmp "$CSV_FILE" echo "操作完成" } update_user() { read -p "用户名: " username current=$(grep "^$username," "$CSV_FILE") || { echo "用户不存在!" && return 1 } echo "当前信息: $current" read -p "新年龄(留空保留): " age [[ -z "$age" ]] && age=$(echo "$current" | cut -d, -f3) read -p "新角色(留空保留): " role [[ -z "$role" ]] && role=$(echo "$current" | cut -d, -f4) sed -i "/^$username,/c\\$username,$(echo "$current"|cut -d, -f2),$age,$role" "$CSV_FILE" echo "更新成功!" } find_user() { read -p "搜索词: " term grep -i "$term" "$CSV_FILE" || echo "无匹配结果" } # 统计功能面板 stats_menu() { while true; do echo -e "\n[统计功能] 1.角色分布 2.平均年龄 3.年龄极值 4.返回" read -p "选择: " choice case $choice in 1) awk -F, 'NR>1{roles[$4]++}END{for(r in roles)print r": "roles[r]"人"}' "$CSV_FILE" ;; 2) awk -F, 'NR>1{sum+=$3;c++}END{printf "平均年龄:%.1f岁\n",sum/c}' "$CSV_FILE" ;; 3) echo "最高年龄:" sort -t, -k3 -nr "$CSV_FILE" | head -2 | tail -1 echo "最低年龄:" sort -t, -k3 -n "$CSV_FILE" | head -2 | tail -1 ;; 4) break ;; *) echo "无效输入" ;; esac done } # 主菜单 main_menu() { init_file while true; do echo -e "\n用户管理系统 v1.0" echo "1.添加用户 2.删除用户 3.修改用户" echo "4.查询用户 5.系统统计 6.退出" read -p "选择操作: " choice case $choice in 1) add_user ;; 2) delete_user ;; 3) update_user ;; 4) find_user ;;
最新发布
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值