“Linux-2020-spring-4-29”的版本间的差异

来自SUDA-HLT
跳到导航 跳到搜索
第7行: 第7行:
 
   cat 2000/*/*.txt | egrep -o '^[0-9-]+' > unsorted
 
   cat 2000/*/*.txt | egrep -o '^[0-9-]+' > unsorted
 
   cat 2000/*/*.txt | egrep -o '^[0-9-]+' | sort > sorted  
 
   cat 2000/*/*.txt | egrep -o '^[0-9-]+' | sort > sorted  
   date; cat 2000/*/*.txt | egrep -o '^[0-9-]+' > /dev/null; date  # 两个date之间,就可以看出来这个命令的执行之间,7秒钟
+
   date; cat 2000/*/*.txt | egrep -o '^[0-9-]+' > /dev/null; date  # 两个date之间,就可以看出来这个命令的执行之间,7秒钟,为什么这么慢,是因为数据很大,每一行都很长。正则表达式效率是非常高的。
 
   date; cat 2000/*/*.txt | sort unsorted > /dev/null; date  # 1秒钟,大家凡事都试一试,就有切身体会了
 
   date; cat 2000/*/*.txt | sort unsorted > /dev/null; date  # 1秒钟,大家凡事都试一试,就有切身体会了
   
 
  
 
== diff ==  
 
== diff ==  

2020年4月29日 (三) 04:57的版本

复习

管道 pipeline

  2000年人民日报语料的处理过程为例
  ls 2000/*/*.txt | wc -l  # 看看一共有多少个这样的文件
  cat 2000/*/*.txt | egrep -o '^[0-9-]+' | sort | uniq :-o只输出匹配上的内容
  cat 2000/*/*.txt | egrep -o '^[0-9-]+' > unsorted
  cat 2000/*/*.txt | egrep -o '^[0-9-]+' | sort > sorted 
  date; cat 2000/*/*.txt | egrep -o '^[0-9-]+' > /dev/null; date  # 两个date之间,就可以看出来这个命令的执行之间,7秒钟,为什么这么慢,是因为数据很大,每一行都很长。正则表达式效率是非常高的。
  date; cat 2000/*/*.txt | sort unsorted > /dev/null; date  # 1秒钟,大家凡事都试一试,就有切身体会了

diff

1、可以大文件,文本文件,没有排序; 2、d:删除(删除第一个文件);a:增加(把第二个文件的内容增加到第一个文件);c:替换

   diff sorted sorted_uniq:把第一文件做修改变成第二个文件
   diff sorted sorted_uniq | nl | less


  • 过滤器 filter

1、什么样的命令是过滤器?能用在管道中 | cmd |

2、什么样的命令可以| cmd |? cmd 对stdin文本按行处理,结果输出到stdout中。

   cat 2000/*/*.txt | egrep -o '^[0-9-]+' | sort > sorted :egrep 就是一个filter


3、egrep ,sort :过滤器不是说一定要(而是能)从stdin到stdout。diff,cp不是过滤器。

4、大部分linux命令的特点:过滤器不是说一定要(而是能)从stdin到stdout。

    1)如果没有argument,默认从stdin中读
    2)输出到stdout中


  • sort
   sort score.txt:跳过空格按数字排序
   sort -k 3 score.txt:根据第三列排序
   sort -n -k 3 score.txt
   sort -r -n -k 3 score.txt
   sort -r -n -u -k 3 score.txt:倒序
   sort -n -u -k 3 score.txt:排序的内容相同就删除
   sort -n -u -k 3 score.txt | uniq:一行完全一样才会删除
  • egrep
  -o 抽取匹配内容
  -n 显示行号
  -v 取反
  -i大小写不敏感
  -r/-R/--recurisive dir必须给定文件夹参数
  egrep -r .
  • tr 是过滤器命令
 tr 'a-z' 'A-Z':把小写换成大写
  • 思考题:从当前文件夹中,所有(递归)包含3个连续数字的txt文件中,egrep -o '^[0-9-]+' |wc -l
    find . -name '*[0-9][0-9][0-9]*.txt' | less
    find . -name '*[0-9][0-9][0-9]*.txt' | xargs egrep -o '^[0-9-]+' |wc -l:将find的输出作为参数
    find . -name '*[0-9][0-9][0-9]*.txt' | xargs cat | egrep -o '^[0-9-]+' |wc -l
    cat `find . -name '*[0-9][0-9][0-9]*.txt'` | less :嵌套命令“~”下面的字符。