Linux awk less tail grep 使用

栏目: 服务器 · 发布时间: 6年前

内容简介:一个Linux 大佬 https://blog.csdn.net/imxiangzi/article/details/50387073转载请注明出处,本文采用

Linux awk less grep sed 等命令使用

  • shell demo
set time = 12:34:56
set hr = `echo $time | awk '{split($0,a,":" ); print a[1]}'` # = 12

set sec = `echo $time | awk '{split($0,a,":" ); print a[3]}'` # = 56

set hms = `echo $time | awk '{split($0,a,":" ); print a[1], a[2], a[3]}'`# = 12 34 56

# 获得5 - 10 line 并且用 `;` 分隔每一行  获得第个元素
sed -n '5,10p' xvideos.com-db.csv | awk '{split($0,a,";" ); print a[1]}'

sed -n '5,10p' xvideos.com-db.csv | awk '{split($0,a,";" ); print a[1] a[2]}'

#从第3000行开始,显示1000行。即显示3000~3999行
cat filename | tail -n +3000 | head -n 1000

#显示1000行到3000行

cat filename| head -n 3000 | tail -n +1000 

tail -n 1000 #:显示最后1000行

tail -n +1000 #:从1000行开始显示,显示1000行以后的

head -n 1000 #:显示前面1000行

tail -400f demo.log #监控最后400行日志文件的变化 等价与 tail -n 400 -f (-f参数是实时)

less demo.log #查看日志文件,支持上下滚屏,查找功能

uniq -c demo.log  #标记该行重复的数量,不重复值为1

grep 'INFO' demo.log     #在文件demo.log中查找所有包行INFO的行

grep -o 'order-fix.curr_id:\([0-9]\+\)' demo.log    #-o选项只提取order-fix.curr_id:xxx的内容(而不是一整行),并输出到屏幕上
grep -c 'ERROR' demo.log   #输出文件demo.log中查找所有包行ERROR的行的数量

# 输出demo.log中的某个日期中的ERROR的行
sed -n '/^2011-08-23.*ERROR/p' demolog.log

#指定执行的sed文件
sed -f demo.sed2 demo.log
  • demo.sed2
#n   #这一行用法和命令中的-n一样意思,就是默认不输出
#demo.sed2
#下面的一行是替换指令,就是把19位长的日期和INFO/ERROR,id,和后面的一截提取出来,然后用@分割符把这4个字段重新按顺序组合
s/^\([-\: 0-9]\{19\}\).*\(INFO\|ERROR\) .*order-fix.curr_id:\([0-9]\+\),\(.*$\)/\1@\3@\2@\4/p


#排序功能 -t表示用@作为分割符,-k表示用分割出来的第几个域排序(不要漏掉后面的,2/,3/,1,详细意思看下面的参考链接,这里不做详述)
sed -f test.sed demolog.log | sort -t@ -k2,2n -k3,3r -k1,1  #n为按数字排序,r为倒序


awk 'BEGIN{FS="@"} {print $2,$3}' demo.log_after_sort   #BEGIN中预处理的是,把@号作为行的列分割符,把分割后的行的第2,3列输出
  • 对指定时间范围内的日志进行统计,包括输出INFO,ERROR总数,记录总数,每个订单记录分类统计
sed -f demo.sed demolog.log | sort -t@ -k2,2n -k3,3r -k1,1 | awk -f demo.awk
  • demo.awk
#下面的例子是作为命令行输入的,利用单引号作为换行标记,这样就不用另外把脚本写进文件调用了
awk '
BEGIN {
FS="@"
}

{
if ($3 == "INFO") {info_count++}
if ($3 == "ERROR") {error_count++}

}

END {
print "order total count:"NR           #NR是awk内置变量,是遍历的当前行号,到了END区域自然行号就等于总数了
printf("INFO count:%d ERROR count:%d\n",info_count,error_count)
} ' demo.log_after_sort
ll -lrth #:按照更改时间倒序排列,最新文件在下边

ll -lrSh #:按照文件大小倒序排列,最大文件在下边
grep --color # :高亮查询关键字
  • 在大多数情况下 awkprint 语句可以完成任务,但有时我们还需要更多。在那些情况下,awk 提供了两个我们熟知的函数 printf()sprintf() 。是的,如同其它许多 awk 部件一样,这些函数等同于相应的 C 语言函数printf() 会将格式化字符串打印到 stdout,而 sprintf()函数返回根据 printf 格式说明指定的格式化的字符串,它格式化数据但不输出数据。a w k提供函数 printf ,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
  • printf() 函数基本语法是 printf()格式控制符参数 ) ,格式控制字符通常在引号里。类似C语言,awk printf格式有如下:
    %c //ASCII字符
      %d //整数
      %e //浮点数,科学记数法
      %f //浮点数,例如(1 2 3 . 4 4)
      %g //awk决定使用哪种浮点数转换 e或者f
      %o //八进制数
      %s //字符串
      %x //十六进制数
    
  • 下面来试试这些个格式:
    echo 97 | awk '{printf("%c\n", $0)}'
    A
  • 类似 C语言 的格式化输出:
    awk 'BEGIN{FS=":"}{printf("%-15s%s\n", $1, $3)}' group_file2
    wireshark    987
    usbmon       986
    jackuser     985
    vboxusers    984
    aln         1001
  • sprintf ()函数返回根据 printf 格式说明指定的格式化的字符串,它格式化数据但不输出数据。所以需要将 sprintf 返回的数据保存在变量里面再输出
awk 'BEGIN{FS=":";ORS=""}{var=sprintf("%s\n", $1);print var}' group_file2
wireshark
usbmon
jackuser
vboxusers
aln

一个 Linux 大佬 https://blog.csdn.net/imxiangzi/article/details/50387073

转载请注明出处,本文采用 CC4.0 协议授权


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Lean Analytics

Lean Analytics

Alistair Croll、Benjamin Yoskovitz / O'Reilly Media / 2013-3-18 / USD 29.99

If you're involved with a startup, analytics help you find your way to the right product and market before the money runs out. But with a flood of information available, where do you start? This book ......一起来看看 《Lean Analytics》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具