bash - 从具有二进制模式字符串的文件中删除行

标签 bash shell awk grep

我有两个文件。文件 A 包含 N 行的文本,文件 B 包含长度为 N 的二进制模式字符串 0 和 1。

我想从文件 A 中删除行号与文件 B 中包含 0 的行号相同的行。

我读到用 awk 做这件事可能是个好主意,但我不知道如何使用它。

文件很长,例如2000行(它们是视频轨迹)

例如:

文件A:

Line 1: 123456
Line 2: 789012
Line 3: 345678
Line 4: 901234

文件 B:

Line 1: 1
Line 2: 0
Line 3: 0
Line 4: 1

执行后:

文件A:

Line 1: 123456
Line 2: 901234

最佳答案

您可以为此使用粘贴剪切:

paste fileB fileA | grep '^1' | cut -f2-
  • paste fileB fileA - 并排粘贴文件内容,用制表符分隔
  • grep '^1' - 过滤以 1 开头的行
  • cut -f2- - 提取我们需要的内容

cutpaste 都使用制表符作为默认分隔符。

这与 Benjamin's 非常相似解决方案。这里的一个小优点是,即使 fileA 每行有多个字段,它也能正常工作。

关于bash - 从具有二进制模式字符串的文件中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50610985/

相关文章:

linux - 为什么 for 循环中的 file 命令表现得如此荒谬

php - 尝试安装 homebrew php 时 OSX 不尊重 PATH

bash - awk 'if condition'下的sum变量 'for loop'

bash - 从 shell 命令的响应中获取文本

linux - 不同行中出现数字/单词

awk - 如何使用awk处理两个结果文件?

arrays - 将带有空格的字符串存储到 Arrays Bash 中

java - Maven Appassembler 插件 - stdout 和/或 stderr 重定向

shell - docker 容器中的 Alpine linux 忽略 shell 脚本参数

performance - 如何在不使用 echo 的情况下 awk 或 grep 变量?