linux 打印第几行内容,linux – 如何从模式中打印第n行?

我正在尝试制作一个脚本,以简短格式汇总包含以下日志的文件.

日志片段:

$cat input.txt

ffffff 1301 2012-08-29T03:13:33 clr crit

Some serious problem

cccc dddddd eeeeee

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Some serious problem in system.

ffffff 1302 2012-08-29T03:13:33 set min

Some serious problem

cccc dddddd eeeeee

bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

Some minor problem in system.

期望的输出:

2012-08-29T03:13:33 clr crit Some serious problem in system.

2012-08-29T03:13:33 set min Some minor problem in system.

我尝试下面的approch:

$cat input.txt | grep -iE "set|upd|clr" | awk '{print $3,$4,$5}' >file1

12-08-29T03:13:33 clr crit

12-08-29T03:13:33 set min

下面的命令从模式“T”给出第5行,但问题在于所需的文本行,在某些情况下,它在第5行,在某些情况下,它在第4行.

$awk '/T/ { show[NR+4]++ } show[NR]' input.txt >file2

$paste file1 file2

查询:

在某些情况下,它在第5行,在某些情况下,它在第4行.我怎样才能确保找到确切的文字.如果可能,请告诉我.

解决方法:

解决此问题的正确方法是将awks Record Separator设置为空字符串,以便awk知道您的输入记录由空行分隔:

$awk -v RS= -F'\n' '{split($1,a,/ +/); print a[3],a[4],a[5],$NF}' file

2012-08-29T03:13:33 clr crit Some serious problem in system.

2012-08-29T03:13:33 set min Some minor problem in system.

这样,如果/当你想要在未来打印记录的其他部分或打印记录数量的计数或仅打印基于某些关键字段或其他任何内容的唯一记录时,这是非常微不足道的,因为awk知道并且正在操作记录.

标签:bash,linux,grep,sed,awk

来源: https://codeday.me/bug/20190624/1282192.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值