首页 > 系统相关 >Linux 打印文本部分行内容(前几行,指定行,中间几行,跨行,奇偶行,后几行,最后一行,匹配行)

Linux 打印文本部分行内容(前几行,指定行,中间几行,跨行,奇偶行,后几行,最后一行,匹配行)

时间:2024-05-10 10:48:49浏览次数:16  
标签:奇偶 daodaotest 打印 几行 sed awk Linux test txt

背景

打印对账文件最后一行汇总信息,顺便总结下 Linux 打印文本部分行内容的各种方法。

测试文本

# 生成测试文本内容
$ seq -f "%02g daodaotest" 1 10 > test.txt

# 查看测试文本内容,并显示行号
$ cat -n test.txt
     1    01 daodaotest
     2    02 daodaotest
     3    03 daodaotest
     4    04 daodaotest
     5    05 daodaotest
     6    06 daodaotest
     7    07 daodaotest
     8    08 daodaotest
     9    09 daodaotest
    10    10 daodaotest

$ awk '{print NR" "$0}' test.txt
1 01 daodaotest
2 02 daodaotest
3 03 daodaotest
4 04 daodaotest
5 05 daodaotest
6 06 daodaotest
7 07 daodaotest
8 08 daodaotest
9 09 daodaotest
10 10 daodaotest

打印前 N 行内容

# head 打印前 5 行内容
$ head -5 test.txt
$ head -n 5 test.txt

# sed 打印前 5 行内容
$ sed -n '1,5p' test.txt

# awk 打印前 5 行内容
$ awk 'NR<6' test.txt

打印指定行内容

# sed 打印第 5 行内容
$ sed -n '5p' test.txt

# awk 打印第 5 行内容
$ awk 'NR==5' test.txt

# tail 配合 head,打印指定行内容
$ tail -n +5 test.txt | head -1

打印指定范围行内容

# sed 打印 5~10 行内容
$ sed -n '5,10p' test.txt

# awk 打印 5~10 行内容
$ awk 'NR>4 && NR<11' test.txt

# tail 配合 head,打印 5~10 行内容
$ tail -n +5 test.txt | head -6

打印跨行内容

# sed 打印第 3 行 和 5~7 行内容
$ sed -n '3p;5,7p' test.txt

# awk 打印第 3 行 和 5~7 行内容
$  awk 'NR==3 || (NR>4 && NR<8)' test.txt

打印奇偶行内容

# 打印奇数行内容
## NR 表示行号
$ awk 'NR%2!=0' test.txt
$ awk 'NR%2' test.txt

## i 为变量,未定义变量初始值为 0,对于字符运算,未定义变量初值为空字符串
## 读取第 1 行记录,进行模式匹配:i=!0(!表示取反)。! 右边是个布尔值,0 为假,非 0 为真,!0 就是真,因此 i=1,条件为真打印第一条记录。
## 读取第 2 行记录,进行模式匹配:i=!1(因为上次 i 的值由 0 变成了 1),条件为假不打印。
## 读取第 3 行记录,因为上次条件为假,i 恢复初值为 0,继续打印。以此类推...
## 上述运算并没有真正的判断记录,而是布尔值真假判断。
$ awk 'i=!i' test.txt

## m~np:m 表示起始行;~2 表示:步长
$ sed -n '1~2p' test.txt

## 先打印第 1 行,执行 n 命令读取当前行的下一行,放到模式空间,后面再没有打印模式空间行操作,所以只保存不打印,同等方式继续打印第 3 行。
$ sed -n '1,$p;n' test.txt
$ sed -n 'p;n' test.txt

# 打印偶数行内容
$ awk 'NR%2==0' test.txt
$ awk '!(NR%2)' test.txt
$ awk '!(i=!i)' test.txt
$ sed -n 'n;p' test.txt
$ sed -n '1~1p' test.txt
$ sed -n '1,$n;p' test.txt

打印最后 N 行内容

# tail 打印后 5 行内容
$ tail -5 test.txt
$ tail -n 5 test.txt

打印最后一行内容

# tail 打印最后一行内容
$ tail -n 1 test.txt

# sed 打印最后一行内容
$ sed -n '$p' test.txt

# awk 打印最后一行内容
$ awk 'END {print}' test.txt

打印匹配行内容

# 打印以 "1" 开头的行内容
$ sed -n '/^1/p' test.txt
$ grep "^1" test.txt

# 打印不以 "1" 开头的行内容
$ sed -n '/1/!p' test.txt
$ grep -v "^1" test.txt

# 从匹配 "03" 行到第 5 行内容
$ sed -n '/03/,5p' test.txt

# 打印匹配 "03" 行 到匹配 "05" 行内容
$ sed -n '/03/,/05/p' test.txt
 

标签:奇偶,daodaotest,打印,几行,sed,awk,Linux,test,txt
From: https://www.cnblogs.com/ylxtiankong/p/18183777

相关文章

  • ArchLinux手动安装--适用于几乎所有linux发行版的安装方式
    注:此教程针对的是UEFI+GPT分区表的环境下进行安装,目的是安装Windows10+ArchLinux双系统,且是单硬盘安装,本人的本地环境是intel+nvidia。参考资料:https://www.youtube.com/watch?v=JRdYSGh-g3s安装前确保本地已经安装好Windows10,且为archlinux分好一定空间已经用Rufus等写盘......
  • linuxC语言点灯
    大部分情况下都是使用C语言去编写的。只是在开始部分用汇编来初始化一下C语言环境,比如初始化DDR、设置堆栈指针SP等等,当这些工作都做完以后就可以进入C语言环境,也就是运行C语言代码,一般都是进入main函数。所以我们有两部分文件要做:①、汇编文件汇编文件只是用来完......
  • Linux下RTC子系统驱动
    Linux下RTC子系统驱动1引入RTCCPU内部有很多定时器,像看门狗WDT,PWM定时器,高精度定时器Timer等等,只在“启动”即“通电时”运行,断电时停止。当然,如果时钟不能连续跟踪时间,则必须手动设置。那么当关机后就没办法自动计数统计时间了。RTC就很好的解决了这个问题,RTC是实时时钟,用......
  • linux VIP 自动切换虚拟IP
    脚本内容如下#!/bin/bashset-oxtracePGCANDIDATES=(192.168.0.92192.168.0.93192.168.0.94192.168.0.95)#HOSTNAME=`hostname-i`VIP=192.168.0.110GW=192.168.1.1DEVICE=enp0s3STEP1="RemovetheVIPonallnodes"STEP2="Checkifvipstillonl......
  • 在 Linux 中将可执行文件设为全局可用
    一、将可执行文件复制到/usr/local/bin/目录:sudocp<binary-name>/usr/local/bin/或生成链接:sudoln-s/absolute/path/to/binary/usr/local/bin/<binary-name>二、echo"exportPATH=/home/wzy/go/bin:$PATH">>~/.profile&&source~/.pr......
  • linux中离线安装docker
    一、linux中离线安装docker1、从官方下载Docker安装包并上传至虚拟机https://download.docker.com/linux/static/stable/x86_64/2.解压安装包tar-xvfdocker-19.03.9.tgz3.将解压出来的docker文件内容移动到/usr/bin/目录下#移动命令复制命令请用cpmvdocker/*/usr......
  • Linux问题--docker启动mysql时提示3306端口被占用(kill不掉3306端口)
    使用kill-9杀掉mysqld服务时一直失败。mysql启动时会启动mysqld和mysqld_safe两个进程,当使用kill-9杀掉mysqld进程时,mysqld_safe会自动重新启动mysqld。当使用正常方式退出mysqld时,mysqld_safe也会退出。如果需要kill掉mysqld服务可以先通过lsof-i:3306查询到占用3306......
  • linux增加环境变量示例
    首先,通过 vim~/.bashrc 命令进入我这个用户的.bashrc文件内 然后在这个文件末尾添加环境变量,比如下面红框中的内容表示添加了路径/home/nfs_new/wangpeng/VSCode-linux-x64/bin为环境变量,实际上这里是把vscode启动命令添加作为环境变量了。其中, $PATH 表示之前所有的环......
  • linux openCV编译
    1、修改平台文件opencv/platforms/linux/arm-gnueabihf.toolchain.cmakeset(GCC_COMPILER_VERSION""CACHESTRING"GCCCompilerversion")set(GNU_MACHINE"arm-linux-gnueabihf"CACHESTRING"GNUcompilertriple")set(CMAKE_C_COMP......
  • Linux I2C子系统驱动
    1LinuxI2C驱动框架由上到下分为3层结构:i2c设备驱动层:作为client使用者使用i2c子系统。提供操作接口给应用层,与应用层交互数据。I2C核心层:提供transfersendrecv函数。把client设备挂载到I2C总线上;维护i2cdriver和i2cclient链表,实现i2c_client和i2c_driver匹配。......