数据提取操作

  • 1.tr命令
  • 方法1
  • 方法2
  • 方法3
  • 2.找到 PATH 变量中的最后⼀个路径。
  • 方法1
  • 方法2
  • 3. 使⽤ last 命令,输出所有的登录⽤户名及登录次数,按登录次数由多及少排序。
  • 4. 在云主机上查找系统登录⽤户的总⼈次
  • 5. 将 /etc/passwd 中的内容按照⽤户名排序。
  • 6. 将 /etc/passwd 中的内容按 uid 排序。
  • 7.将本地的 /etc ⽬录下的⽂件及⽬录,每⼗条保存到⼀个⽂件中。
  • 8. 将 /etc/passwd 中存放的第10到20个⽤户,输出 uid ,gid 和 groups 。
  • 9. 将按照⽤户名查看 /etc/passwd 中的⽤户,读到 'sync’ ⽤户时结束。
  • 10. 词频统计



1.tr命令

1 2 3 4 5 6 7 9 a v 你好 . /8 求以上字符串中所有数字之和

方法1

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.echo -n 不打印换行
  • 3.tr [第一字符集] [第二字符集] 把第一字符集替换为第二字符集
  • 4.tr -c 0-9 + 取代所有不属于第一字符集的字符(0-9之外的其他字符替换为+)
  • 5.tr -s 将连续重复的字符以单独一个字符表示(++++替换为+)
  • 6.xargs echo ‘|’可以将标准输出转换为标准输入,参数代换可以将管道或标准输入(stdin)数据转换成命令行参数,echo不能从标准输入读取(只能从命令行读取)
  • 7.bc 计算,使用echo+管道,因为bc计算时需要换行符,否则不知道什么时候结束输入
    bc <<< “scale=2;1/3” 保留小数点后2位

方法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计算,这里管道之前的0表示其中一个加数,45+0=45
  • 2.``表示先执行其之内的命令

方法3

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 
cat test.log | tr A-Z a-z > test.log

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

方法1

echo ${PATH} | tr : '\n' | tail -n 1
  • 1.tr : ‘\n’ 冒号替换为换行
  • 2.tail -n 1 显示文件结尾最后一行的内容,等价于tail -n1

方法2

echo $PATH | rev | cut -d ":" -f1 | rev
  • 1.echo $PATH 显示的路径是以:分隔
  • 2.rev是反序显示
  • 3.cut -d: -f1将反序显示的内容以:分割并且只显示第一项然后再反序显示

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 排序,这里默认是根据ASCII码升序排序 -u可以去重,但是这里没有使用,为了后边uniq -c统计
  • 4.grep -v “^$” 反向输出(去除了空行 ^和 $分别表示句首和句尾)wtmp的一样的意思,去除wtmp的一行
  • 5.uniq -c 进行计数
  • 6.sort -nr 根据数值进行排序,反向排序

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

last | cut -d ' ' -f 1 | sort | grep -v "^$" | grep -v wtmp | uniq -c | sort -nr | wc -l
  • 1.这里注意wc -l的使用wc本来就是word count的含义,加了 -l表示行数,其他的用法包括-c和-w,一般使用差不多

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

cat /etc/passwd | sort

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

cat /etc/passwd | sort -t : -k 3 -n
  • 1.sort -t :以:作为分隔
  • 2.sort [-k field1[,field2]] 按指定的列进行排序,-n 依照数值的大小排序。

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 1 | xargs -n 1 id

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

cat /etc/passwd | cut -d : -f 1 | xargs -esync
  • 1.xrags -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。

10. 词频统计

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

nihao hello hello 你好
nihao
hello

ls

cd
world
pwd
xxx

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