美文网首页
awk、perl简单操作

awk、perl简单操作

作者: 刘大坝 | 来源:发表于2021-07-08 10:15 被阅读0次

awk之按特征相邻行去重(保留第一行或最后一行)

http://blog.chinaunix.net/uid-10540984-id-1761379.html

file:尾巴内有一个#代表该天第一个数据 三个#代表最后一个数据

2011-07-06  0:38:40 copy file 192.168.1.67 speed: 2.256 MBps #
2011-07-06  1:30:46 copy file 192.168.1.67 speed: 2.000 MBps
2011-07-06  2:30:43 copy file 192.168.1.67 speed: 2.095 MBps ###
2011-07-07  0:33:43 copy file 192.168.1.67 speed: 2.146 MBps #
2011-07-07  1:30:43 copy file 192.168.1.67 speed: 2.095 MBps
2011-07-07  2:30:43 copy file 192.168.1.67 speed: 2.146 MBps
2011-07-07  2:32:55 copy file 192.168.1.67 speed: 5.126 MBps ###
2011-07-08  0:31:01 copy file 192.168.1.67 speed: 1.508 MBps #
2011-07-08  1:32:51 copy file 192.168.1.67 speed: 1.816 MBps ###
2011-07-09  0:32:44 copy file 192.168.1.67 speed: 2.119 MBps #
2011-07-09  1:34:48 copy file 192.168.1.67 speed: 1.935 MBps
2011-07-09  2:30:57 copy file 192.168.1.67 speed: 1.618 MBps
2011-07-09  6:05:57 copy file 192.168.1.67 speed: 1.358 MBps
2011-07-09  8:30:57 copy file 192.168.1.67 speed: 1.618 MBps ###
2011-07-10  0:30:55 copy file 192.168.1.67 speed: 1.679 MBps #
2011-07-10  1:31:00 copy file 192.168.1.67 speed: 1.534 MBps ###

如何提取每天的第一行数据或最后一行数据,尾巴内有一个#,尾巴内有三个#

数组解法:

# 只提取每天的第一行数据
awk '!a[$1]++' file
awk '++a[$1]==1' file

# 只提取每天的最后一行数据
awk '{a[$1]=$0}END{for(i=1;i<=asort(a);i++)print a[i]}' file
awk '!a[$1]++&&i{print i}{i=$0}END{print i}' file

非数组解法:

# 只提取每天第一行数据
awk '$1!=x{x=$1;print}' file

# 只提取每天最后一行数据
awk 'NR>1{if($1!=x)print y}{x=$1;y=$0}' file <(echo)

话说数组的效率那确实在大文件下够慢的,别看非数组的命令比较长点,效率那可是高的。

sed解法:

# 只提取每天第一行数据
sed -r ':a;$!N;s/([^ ]+)( +[^\n]+)\n\1.*/\1\2/;ta;P;D' file

# 只提取每天最后一行数据
sed -r ':a;$!N;s/([^ ]+) +[^\n]+\n\1(.*)/\1\2/;ta;P;D' file
sed -r '$!N;/([^ ]+ ).*\n\1/!P;D' file

perl 批量替换test.properties 中的AAD为 BBC

> perl -p -i -e 's/AAD/BBC/g' test.properties

perl 删除匹配到的行,后面的N行

$ cat delete_5lines.txt 
1 
2 
3 
4 
5 hello 
6 
7 
8 
9 
10  
$ perl -ne ' BEGIN{$y=1} $y=$.  if /hello/ ; print if $y==1 or $.-$y > 5 ' delete_5lines.txt
1 
2 
3 
4 
11 hai 

相关文章

  • awk、perl简单操作

    awk之按特征相邻行去重(保留第一行或最后一行) http://blog.chinaunix.net/uid-10...

  • perl 命令行模式

    awk和sed 单行命令很强大,但是不用了老是记不住,写perl习惯,用perl命令行处理简单的事物还是很方便的!...

  • perl oneline 与awk 比对

    [1] 输出 print,异同(1)perl oneline 中 print 不像awk 中 print 结果自动...

  • 修改fzf去掉perl依赖应用到容器

    fzf可以快速调用历史命令,但依赖perl,容器中使用还得加上perl依赖就不太合理了,sed和awk都能作为替代...

  • linux awk的简单使用

    今天想用简单的shell操作数据中的列,发现awk特别好用,简单记录下 通常使用 awk来获取多个列的情况,比如有...

  • 想学、待学

    運維文本字符串處理4劍客:grep sed awk perl 。

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • Perl的简单联网操作

    前言 更多内容,请访问我的 个人博客。 GET POST

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

  • awk

    awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...

网友评论

      本文标题:awk、perl简单操作

      本文链接:https://www.haomeiwen.com/subject/hnowsltx.html