专栏首页技术小黑屋Linux 下使用cut命令,实现更好切分数据

Linux 下使用cut命令,实现更好切分数据

cut是什么

  • 一个Unix终端命令
  • 切割行内容,并进行标准输出
  • 可以按照字节,字符,分隔符进行切分

能有什么用

我们举一个简单的例子(非全部示例)来描述cut有什么用,可以做什么

简洁输出,去除干扰冗余信息

比如这个日志,可能会出现折行,另外假设04-19 18:26:55.605 22750 22883 W这些列的信息属于干扰信息

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

04-19 18:26:55.605 22750 22883 W System.err: java.lang.NoSuchFieldException 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.au.a(Unknown Source:16) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.au.a(Unknown Source:4) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.z.a(Unknown Source:880) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.z.a(Unknown Source:188) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.p.a(Unknown Source:821) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.p.a(Unknown Source:605) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.p.a(Unknown Source:11) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.d.a(Unknown Source:46) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.ak.b(Unknown Source:50) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.ak.a(Unknown Source:10) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.XMPushService$c.a(Unknown Source:8) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.XMPushService$i.run(Unknown Source:37) 04-19 18:26:55.605 22750 22883 W System.err: at com.xiaomi.push.service.g$c.run(Unknown Source:175) 04-19 18:27:24.787 23660 23685 W System.err: load vdr indoor lib success.

使用cut 我们可以实现删除上面的冗余信息

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

adb logcat | grep "System.err" --line-buffered | cut -d " " -f 6- System.err: java.lang.NoSuchFieldException System.err: at com.xiaomi.push.au.a(Unknown Source:16) System.err: at com.xiaomi.push.au.a(Unknown Source:4) System.err: at com.xiaomi.push.service.z.a(Unknown Source:880) System.err: at com.xiaomi.push.service.z.a(Unknown Source:188) System.err: at com.xiaomi.push.service.p.a(Unknown Source:821) System.err: at com.xiaomi.push.service.p.a(Unknown Source:605) System.err: at com.xiaomi.push.service.p.a(Unknown Source:11) System.err: at com.xiaomi.push.service.d.a(Unknown Source:46) System.err: at com.xiaomi.push.service.ak.b(Unknown Source:50) System.err: at com.xiaomi.push.service.ak.a(Unknown Source:10) System.err: at com.xiaomi.push.service.XMPushService$c.a(Unknown Source:8) System.err: at com.xiaomi.push.service.XMPushService$i.run(Unknown Source:37) System.err: at com.xiaomi.push.service.g$c.run(Unknown Source:175)

按照字节切分(cut -b)

按照字节位置切分

1 2 3 4 5 6 7 8 9 10 11 12 13 14

# 取第一个字节 [email protected]:~ $ echo "abcdef" | cut -b 1 a # 取第二个字节 [email protected]:~ $ echo "abcdef" | cut -b 2 b # 从1开始,0会报错 [email protected]:~ $ echo "abcdef" | cut -b 0 cut: byte/character positions are numbered from 1 Try 'cut --help' for more information.

按照字节区间切分

1 2 3 4 5 6 7 8 9 10 11

#1到2字节位置切分 [email protected]:~ $ echo "abcdef" | cut -b 1-2 ab # 限定区间起始位置,不限定结束位置 [email protected]:~ $ echo "abcdef" | cut -b 1- abcdef # 限定区间结束位置,但不限定起始位置 [email protected]:~ $ echo "abcdef" | cut -b -5 abcde

按照字节多个位置切分

1 2

[email protected]:~ $ echo "abcdef" | cut -b 1,3,5 ace

按照字符区分

当我们按照字符进行切分时,会遇到一些问题,比如出现中文的时候(一个中文占用三个字节)

1 2 3 4 5 6 7

# 异常出现 echo "小黑屋" | cut -b 1 � ##必须限定满足正确的开始和结束位置 echo "小黑屋" | cut -b 1-3 小

但是如果中英文并存,就比较麻烦了,好在有按照字符切分的方法(cut -c)

1 2 3 4 5 6 7 8 9 10 11 12 13 14

echo "abcd技术小黑屋ef" | cut -c 7 小 echo "abcd技术小黑屋ef" | cut -c 7-9 小黑屋 echo "abcd技术小黑屋ef" | cut -c 7,8,9 小黑屋 echo "abcd技术小黑屋ef" | cut -c 5- 技术小黑屋ef echo "abcd技术小黑屋ef" | cut -c -9 abcd技术小黑屋

按照分隔符切分(cut -d )

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

echo "A|BC|DEF|GHIJ" | cut -d "|" -f 1 A echo "A|BC|DEF|GHIJ" | cut -d "|" -f 2 BC echo "A|BC|DEF|GHIJ" | cut -d "|" -f 3 DEF # 区间,限定开始位置 echo "A|BC|DEF|GHIJ" | cut -d "|" -f 1- A|BC|DEF|GHIJ #区间,限定结束位置 echo "A|BC|DEF|GHIJ" | cut -d "|" -f -3 A|BC|DEF # 区间,限定开始和结束位置 echo "A|BC|DEF|GHIJ" | cut -d "|" -f 1-2 A|BC #提供多个位置 echo "A|BC|DEF|GHIJ" | cut -d "|" -f 1,2 A|BC

注意

  • 上面为了示例简单实用了echo 加管道的方式
  • 上面所有的例子,都可以实用类似加文件的形式
  • 比如cut -b 1 test_cut_file.txt,cut -c 1 test_cut_file.txt,cut -d "|" -f 1 test_cut_file.txt

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 带有实际示例的Linux Cut命令

    cut命令用于Linux和Unix系统中,从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

    用户6543014
  • linux学习第二十五篇:cut,sort,wc,uniq,tee,tr,split命令,shell特殊符号

    * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 find /etc/ -type f -name “*conf” -exec ca...

    用户1215343
  • Shell进阶必会的几个工具,你都掌握了吗?(附真实企业面试题)

    在之前的一篇博客?《零基础小白如何入门Shell,快来看看(收藏)这篇大总结!!》中,博主已经为大家介绍了Shell常见的入门级操作,本篇博客,...

    大数据梦想家
  • 扩充你的工具箱 - 大行文件的处理

    前言 前几天,从 DBA 手里接到一个 Redis RDB 文件,里面是 15G 约 660万 的 Redis 键值对数据,想通过这些数据提取出当前 Redis...

    枕边书
  • Linux之cut命令

    cut命令是一个常用的linux命令,它从文件的每一行剪切字节、字符和字段并将这些剪切出来的东西写到标准输出。它有一些常用的参数,先看两个:

    AsiaYe
  • 3个学生的linux视频学习笔记

    工欲善其事必先利其器,这一节课主要以Windows系统为例,介绍了用Linux编程之前需要下载并安装的软件:Xshell,git,markdown,Winscp...

    生信技能树
  • Shell实用工具

    cut 译为“剪切, 切割”,是一个强大文本处理工具,它可以将文本按列进行划分的文本处理。cut命令逐行读入文本,然后按列划分字段并进行提取、输出等操作。

    乐心湖
  • Shell常见的面试题

    linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等?使用linux的内核操作计算机的硬件Shell介绍...

    乐心湖
  • 程序员需要知道的8个Linux命令

    每个程序员,在职业生涯的某个时刻,总会发现自己需要知道一些Linux方面的知识。我并不是说你应该成为一个Linux专家,我的意思是,当面对linux命令行任务时...

    猿人谷

扫码关注云+社区

领取腾讯云代金券