linux - 使用 SED 提取数据范围

标签 linux

文件格式为

  • 12000:P:1:14
  • 12001 10000
  • 12001 10500
  • 12001 10800
  • 12001 11000

我需要什么? 使用 SED(使用内联替换),我提取从(并包含)10500 到(并包含)10800 的范围(删除 12001 10000 和 12001 11000)并创建具有相同文件名的新文件,如下所示

  • 12000:P:1:14
  • 12001 10500
  • 12001 10800

我在这里做了研究并阅读了很多答案,只有我发现它有效 sed -i '/10[0-4].../!d' *.file,但这只是部分好。正如我所看到的,只有 SED 有 (-i) 选项。请大家帮忙

Screenshot of data in Notepad

最佳答案

Perl 来救援:

perl -ane 'print if 1 == $. || $F[1] >= 10500 && $F[1] <= 10800' file
  • -n 逐行读取输入
  • -a 将每一行分割到 @F 数组中
  • $. 是输入行号,因此 1 == $. 对于标题行为 true
  • $F[1] 是第二列

关于linux - 使用 SED 提取数据范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710488/

相关文章:

linux - 如何在 Ubuntu 的 IDEA 中设置 git 方式?

linux - inode 数据结构中的数据指针

linux - 为什么我们使用“/etc/init.d/process start”

linux - 使用awk将文件拆分为多个文件,但采用日期格式

c - 使用 setlocale() 和 gettext() 在 Ubuntu 上测试语言环境

linux - 读取文件第一列的 csv 并使用 UNIX shell 脚本在文件系统上搜索与第一列中的值相同的目录

c++ - 无法在 Linux 上运行 BRIEF_demo

linux - 在 Sed 中的匹配项之间添加一个空格

linux - 我在 azure linux VM 上有两个磁盘,sda 和 sdb

linux - 使用数组组装 x86 中的汉诺塔