[Linux] 7. 数据提取

习题

1. tr命令,内容的替换操作

"1 2 3 4 5 6 7 9 a v 你好 . /8" 求以上字符串中所有数字之和
echo -n "1 2 3 4 5 6 7 9 a v 你好 . /8" | tr -s -c 0-9 + | xargs echo | bc
  1. echo -n 不打印换行
  2. tr [第一字符集] [第二字符集] 把第一字符集替换为第二字符集
  3. tr -c 0-9 + 取代所有不属于第一字符集的字符(0-9之外的其他字符替换为+)
  4. tr -s 将连续重复的字符以单独一个字符表示(++++替换为+)
  5. xargs echo ‘|’可以将标准输出转换为标准输入,参数代换可以将管道或标准输入(stdin)数据转换成命令行参数,echo不能从标准输入读取(只能从命令行读取)
  6. bc 计算,使用echo+管道,因为bc计算时需要换行符,否则不知道什么时候结束输入
  7. bc <<< “scale=2;1/3” 保留小数点后2位
echo `echo "1 2 3 4 5 6 7 9 a v 你好 . /8" | tr -c "[0-9]" + | tr -s "+"`0 | bc
  1. echo 打印自动换行,可以直接bc计算
  2. ``表示先执行其之内的命令
echo "1 2 3 4 5 6 7 9 a v 你好 . /8" | tr -c "[0-9]" " " | tr -s " " | awk -v sum=0 '{for(i=1;i<=NF;i++) sum+=$i} END{print sum}'
  1. awk -v sum=0 赋值一个用户定义变量
  2. NF 代表一行有多少个域 (也就是一行有多少个单词),$NF表最后一个域 (也就是最后一个单词)
echo “ABCefg” >> test.log 请将该⽂件中所有⼤写字母转换为⼩写
cat test.log | tr "[:upper:]" "[:lower:]" > test.log 
  1. tr “[:upper:]” “[:lower:]” 大写替换为小写,等价于 tr A-Z a-z

2. 找到 PATH 变量中的最后⼀个路径。

echo ${PATH} | tr : '\n' | tail -n 1
  1. echo $PATH和echo $path区别:路径之间用“:”还是“ ”隔开
  2. echo ${PATH} 打印PATH变量
  3. tr : ‘\n’ 冒号替换为换行
  4. tail -n 1 显示文件结尾最后一行的内容,等价于tail -n1
  5. tr替换cut -d : -f ? 不知道第几项,故不能用cut
echo $PATH | rev | cut -d ":" -f1 | rev

3. 使⽤ last 命令,输出所有的登录⽤户名及登录次数,按登录次数由多及少排序。

last | cut -d ' ' -f 1 | sort | grep -v "^$" | grep -v wtmp | uniq -c | sort -nr
  1. last 输出所有的登录⽤户名及登录次数等等信息
  2. cut -d ’ ’ -f 1 以空格切分,并保留第一列
  3. sort 排序,目的是uniq去重干净
  4. grep -v “^$” 反向输出(输出没找到的)
  5. uniq -c 进行计数
  6. sort -nr 根据数值进行排序,反向排序

4. 在云主机上查找系统登录⽤户的总⼈次。

last | cut -d ' ' -f 1 | sort | grep -v "^$" | grep -v wtmp | uniq -c | sort -nr | wc -l

# "^$"空行

5. 将 /etc/passwd 中的内容按照⽤户名排序。

cat /etc/passwd | sort
# 用户名正好第一列

6. 将 /etc/passwd 中的内容按 uid 排序。

cat /etc/passwd | sort -t : -k 3 -n
# cat /etc/passwd | cut -d : -f 1-不用这个

7. 将本地的 /etc ⽬录下的⽂件及⽬录,每⼗条保存到⼀个⽂件中。

ls /etc/ | split -l 10

8. 将 /etc/passwd 中存放的第10到20个⽤户,输出 uid ,gid 和 groups 。

cat /etc/passwd | head -n 20 | tail -n 11 | cut -d : -f 3-5 | tr : ' '

9. 将按照⽤户名查看 /etc/passwd 中的⽤户,读到 'sync’ ⽤户时结束。

cat /etc/passwd | cut -d : -f 1 | xargs -esync

10. 词频统计

⽤下⾯这个命令⽣成⼀个⽂本⽂件。
cat >> a.txt << xxx
nihao hello hello 你好
nihao
hello

ls

cd
world
pwd
xxx

统计a.txt中各词的词频,并按照从⼤到⼩的顺序输出

cat a.txt | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -n

# << xxx 遇到xxx结束
# find . -name "*.c" | xargs cat | tr ' ' '\n' | grep -v "^$" | sort | uniq -c | sort -n
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值