使用 SED 通过带有要删除的行号的索引来删除某些行

2023-12-05

我得到一个大文件,称之为 file.txt,可能有 20000 行或更多。其中一些行必须从原始文件中删除,并且必须创建一个包含其余行的新文件,例如 newfile.txt。要删除的行位于另一个文件中,例如index.txt。所以我是这样的:

文件.txt:

line1
line2
...
line19999
line20000

索引.txt

11
56
79
...
19856

我一直在尝试使用 sed,试图让它使用索引中的数字来删除这些行,例如:

for i in ${index.txt[@]}
do
    sed -i.back '${i}d' file.txt>newfile.txt
done

但是,我收到一条错误消息 ${index.txt[@]}: bad replacement ,而且我不知道如何解决这个问题。

我也尝试过使用 gawk,但是代码有问题,我认为这与文件用制表符缩进有关。如果有人可以提供帮助,我将不胜感激。


Do not循环调用 sed ,那会很慢。

您可以将索引文件转换为 sed 脚本,然后对数据文件调用 sed 一次:

sed -i.bak "$(sed 's/$/d/' index.txt)" file.txt

或者,正如 @Hazzard17 指出的那样,忽略不只包含数字的行:

script=$(sed -n '/^[[:blank:]]*[[:digit:]]\+[[:blank:]]*$/ s/$/d/p' index.txt)
sed -i.bak "$script" file.txt

a demo:

$ seq 20000 | sed 's/^/line/' > file.txt
$ wc file.txt
 20000  20000 188894 file.txt
$ seq 20000 | while read n; do [[ $RANDOM -le 5000 ]] && echo $n; done > index.txt
$ wc index.txt
 3083  3083 16789 index.txt
$ sed -i.bak "$(sed 's/$/d/' index.txt)" file.txt
$ wc -l file.txt{,.bak}
 16917 file.txt
 20000 file.txt.bak
 36917 total

要将文件读入数组,您可以执行以下操作:

mapfile -t indices < index.txt
for i in "${indices[@]}"; do ...; done

或者只是迭代文件

while IFS= read -r i; do ...; done < index.txt
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 SED 通过带有要删除的行号的索引来删除某些行 的相关文章

  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • rsync --include 选项不排除其他文件

    尝试rsync某些扩展名 sh 的文件 但下面的bash脚本仍然传输所有文件 为什么 from home xxx rsync zvr include sh from root host home tmp 您需要添加 exclude all
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 在 Linux 服务器上创建和编辑 MS-Word 文档?

    希望开发处理文档的服务器端应用程序 源文档大多是MS Word 2003 2007 即MS版本的Docx 希望服务器应用程序能够在linux或windows上运行 想知道在linux下读写MS Word文件最好的工具或库是什么 兼容性是最重
  • 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

    是否可以通过使用 C 程序更改 RAM 中屏幕 视频即监视器 内存映射中的值来显示黑点 我不想使用任何库函数 因为我的主要目标是学习如何开发简单的操作系统 我尝试访问起始屏幕内存映射 即 0xA0000 在 C 中 我尝试运行该程序 但由于
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • shell脚本中是否有互斥/信号量机制?

    我正在 shell 脚本中寻找互斥 信号量 并发机制 考虑以下情况 除非 a 用户不关闭共享文件 否则 b 用户应该无法打开 更新它 我只是想知道如何在 shell 脚本中实现互斥量 信号量 临界区等 在 shell 脚本中实现锁定机制 文
  • 将儒略时间戳转换为 UNIX 中的常规时间

    我需要使用 Bash 将 UNIX 中的 Julian 时间戳转换为常规时间戳 在 Tandem OS 上 转换非常简单 例子 212186319010244541 OLSAPP SYSTST 1 gt interprettimestamp
  • Bash如何使用awk在空行上分割文件

    我有一个文本文件 A in 我想将其拆分为多个文件 每次发现空行时都应该进行拆分 文件名应该是渐进的 A1 in A2 in I found this https stackoverflow com questions 16483507 s
  • 水银大号

    你知道如何让 Quicksilver 在屏幕上显示大量的大字体吗 通过点击 然后输入自由文本 选择 操作 下的 查看大字体 并按 Enter 键 好吧 有谁知道一种以编程方式做到这一点的方法吗 另外 quicksilver 是必需的还是内置
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 使用 terminfo 的终端颜色?

    我正在编写一个 C 类 允许在终端中使用颜色 我希望它适用于每个终端 在支持真彩色 24 位 的终端上打印 在支持它的终端上具有 256 色 6x6x6 其他都是基本的 16 种颜色 我曾经使用 termcap 编写过一次 C 函数 并且我
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 如何使用 jq 和 Bash 将 JSON 展平为 Key=Selector 的 Bash 关联数组?

    作为后续展平任意 JSON https stackoverflow com questions 42299905 using jq flatten arbitrary json to delimiter separated flat dic
  • 为什么 ?(*[[:class:]])foobar 的 Bash 模式匹配速度很慢?

    我有一个文本文件 foobar txt 大约 10KB 不是那么长 然而 以下匹配搜索命令在高性能 Linux 计算机上大约需要 10 秒 bash gt shopt s extglob bash gt cat foobar txt pri
  • 在 bash 中快速引用 stdout(即上一个命令的输出)?

    有没有办法快速 例如通过键盘快捷键等 引用写入到 stdout 的上一个命令的输出 例如 如果我这样做 which rails 它回来了 usr local bin rails然后我想在 textmate 中打开该文件 我可以像这样重新输入
  • 如何获取 bash 中从 Ping 接收到的数据包的百分比?

    当 ping 主机时 我希望输出仅显示收到的数据包 已发送 5 个 的百分比 我想我需要使用grep不知怎的 但我不知道如何 我是 bash 编程的新手 这是我所在的地方 ping c 5 q host grep grep 中应该包含什么

随机推荐

  • Bean 验证不起作用 Spring Data Neo4j

    我正在使用带有嵌入式 Neo4j 的 SDN 我必须使用 bean validate 但它不起作用 null 毫无例外地保存在数据库中 依赖性是 dependencies specify dependencies here under ei
  • 如何根据普通 JavaScript 中的输入名称创建表单输入值的嵌套对象 (JSON)?

    假设表格如下所示
  • 图像处理 - 旋转扫描文档以对齐文本

    我有一个 OCR C 项目 其中包含包含文本的扫描文档 我需要返回文档中的文本 我已经有了解析文本的解决方案 但是我们陷入了扫描文档旋转的部分 向右或向左 假设图像中没有噪声 所有像素都是白色或黑色 任何人都可以帮助我们使用一种算法在运行时
  • MVC中Ajax.BeginForm刷新整个页面

    我一直在尝试向我的 mvc 站点添加一些 Ajax 功能 但是 我遇到了有关页面刷新的问题 我在主页侧边栏上创建了一个 RSS 视图 它允许用户使用下拉列表选择他们想要查看的 RSS 提要 最初我在 mvc 中使用 html begin 表
  • WSO2 ESB 未知错误代码 102511

    我最近升级了WSO2 ESB到版本 4 7Windows Server 2008 R2在简单地将 SOAP 请求代理到端点时遇到了下一个错误 当处理程序处于不一致状态时接收响应REQUEST HEAD ERROR CODE 102511 E
  • 使用 IntelliJ 内部控制台的 Kotlin readLine() 函数出现问题

    当我尝试从用户那里读取一些值时 我会得到奇怪的行为 例如 如果我有一个简单的程序 fun main print insert value val tmp readLine println value tmp 我期望该程序的下一个行为 ins
  • 可以根据 URL 路径解析 DNS

    我的理解是 与单独的子域 例如不同书籍类型的子站点 相比 将两个相关站点放在同一域下有一定的优势 我能想到的两个是使用相同的 SSL 证书和 SEO 排名 我希望同一域有不同的路径解析到不同的 IP 地址 例如example com a t
  • notificationclick 事件服务工作者

    我正在与服务人员合作在我的用户之间显示通知 在我的代码中我包括notificationclick事件 通过这次活动 我试图处理两个案例 第一种情况 如果在我的浏览器中打开了我的网站页面 请不要打开它 而是关注它 第二种情况 如果我的浏览器没
  • 如何将java函数指针传递给c++本机代码

    我想从java android 代码调用本机c 方法 并将java函数作为参数传递 这样我就能够将函数指针保存在c 代码中 并从本机代码激活它 我选择使用匿名类在java中实现函数指针 并从java中调用本机函数 如下所示 interfac
  • 尝试将 NetCDF 导入 R 时出错

    我很难在 R 中打开 NetCDF 文件 当我尝试用以下命令打开它时 library ncdf read in NetCDF file maize nc lt open ncdf C Users Jo Desktop pft harvest
  • 如何在 C# 中从 Active Directory 获取 System.__ComObject 值

    经过长时间的搜索 我决定就我的问题提出自己的问题 我尝试获取 Active Directory 中属性的值 但总是得到系统 ComObject correspondance compte Properties ENTPersonDateNa
  • 在 python 中使用 subprocess.Popen 运行 java 主类

    我想执行java主类main java通过 python 使用subprocess Popen main java需要 3 个参数 我想知道该怎么做 例如我有一个HelloWorld java class public class Hell
  • Xamarin Forms 按钮中的 Android 资源名称

    Play 商店现在允许您指定要使用的预启动报告模拟器的凭据 为了让模拟器知道将凭据添加到哪个文本字段以及单击哪个按钮进行登录 它会询问文本字段和按钮的资源名称 Xamarin Form 的任何属性是否会转换为资源名称 我尝试查看 obj a
  • 使用异步管道到模板上的属性

    export class MyClass data MyData constructor private dataService DataService this dataService getData subscribe myData g
  • 二元运算符 / 不能应用于 Int 和 Double 类型的操作数 [重复]

    这个问题在这里已经有答案了 您好 对于 Swift 和一般编程新手来说 通过练习给出的代码正是 Playground noun a place where people can play import UIKit let height 12
  • 默认的“”边距有多宽?

    默认值是什么marginHTML为其设置的标签 我注意到有一些自动保证金 但我想知道是否有人知道它是多少 以及是否在px or etc 在大多数主流浏览器中 默认边距为8px在所有方面 它以像素为单位定义为user agent styles
  • 从支持的设备中删除 3G

    我正在尝试找出如何删除 AppStore 中我的应用程序支持的 iPhone 3G 设备 我向 Apple 支持人员发送了电子邮件 要求他们在 reqs 部分中更新它 他们回复说我需要更新我的 UIRequiredDeviceCapabil
  • 如何使用 fxml 在 javafx 中的文本字段上触发焦点事件?

    我在相关 fxml 的控制器类中有这个函数 我需要在焦点从文本字段中触发时触发此函数 但场景生成器没有类似于 onfocusout 的事件 如何使用控制类来实现这一点 FXML private void ValidateBikeNo Too
  • 无法使用 PERMISSIVE 模式保留 pyspark 中损坏的行

    我收到了一个 csv 文件 我需要在其中使用 pyspark 执行某些清理任务 在清理之前 我正在进行一些架构验证检查 下面是我的代码 schema for the input data def get input schema retur
  • 使用 SED 通过带有要删除的行号的索引来删除某些行

    我得到一个大文件 称之为 file txt 可能有 20000 行或更多 其中一些行必须从原始文件中删除 并且必须创建一个包含其余行的新文件 例如 newfile txt 要删除的行位于另一个文件中 例如index txt 所以我是这样的