linux - 如何删除一个文件的第一个值未出现在另一个文件中的行?

标签 linux shell

我有一个包含整数列的文件 -> File1

1 2 3
2 2 2
3 2 1
3 1 4
4 1 4
5 0 0

我有另一个包含单列(唯一)整数的文件 -> File2

1
3
4

两个文件都非常大。我想删除第一列值未出现在 File2 中的 File1 行。

1 2 3
3 2 1
3 1 4
4 1 4

最佳答案

您可以循环遍历 File1 的行,从每一行中提取第一个数字并尝试找到与 File2 中的数字完全匹配的数字。

#!/bin/bash

IFS=$'\n'
re='^[0-9]+$'

for i in $( cat File1 ); do
    num=$( echo $i | awk '{print $1}' )
    grp=$( grep "^${num}\b" File2 )
    if [[ $grp =~ $re ]] ; then
        echo $i
    fi
done

您可以将此脚本的输出保存在一个临时文件中,并用它来覆盖原始文件 1。

关于linux - 如何删除一个文件的第一个值未出现在另一个文件中的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360968/

相关文章:

java - 成功执行安全关机后,服务器会频繁启动/停止。怎么了?

linux - 子进程创建期间的调度

c - C 和 Linux 中的单一实例应用程序

linux - 如何从 bash 中的 .csv 文件的第一行获取特定列?

linux - 如何使用 awk 从文件中删除一行并按某个字符串过滤

linux - 期望自动登录到二级远程机器

reactjs - 如何使用 HTTPS 启动 React 项目

java - 将 Java 系统退出值返回给 bash 脚本

bash - 要求用户继续 y/n 的 Shell 脚本

python - 安装 Bugjar - Python 的 GUI 调试器