linux - 在Linux中高效地读取和操作大文件

标签 linux file

我有两个文件

文件1:

030055 a
033366 b

文件2:

03005515077 x||03215549849 y||03336678899 z||03005577733 xx||03005583838 yy

需要一个 Shell 脚本,逐行读取文件 1(030055 a),分隔数字值(030055),在文件 2 中查找它。如果找到,将字符值替换为“030055 a”中的“a”。

示例: File1的第一条记录:030055a 将其与文件 2 进行比较,该数字模式匹配的记录如下

03005515077 x 和 03005577733 xx 和 03005583838 yy

只需将 x、xx 和 yy 替换为 a 即可变为

03005515077a和03005577733a和03005583838a

最佳答案

沿着这些思路(未经测试);

#!/bin/bash

while read line
do
    COL1 = `cat $line | awk '{print $1}'`
    COL2 = `cat $line | awk '{print $2}'`
    sed "s/(${COL1}[0-9]+)[^||]*||/\1 ${COL2}||/g" file_2 > file_2.out
    mv file_2.out file_2
done < "file_1"

关于linux - 在Linux中高效地读取和操作大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12901789/

相关文章:

c++ - Qt & Raspberry Pi 取终端命令的响应值

C:从文件中读取int并将其存储在指针数组中

c# - 在 C# 中比较二进制文件

c# - 如何检测USB驱动器是否已插入?

linux - cgconfig 服务无法启动

c - 从用户空间获取打开文件的引用计数(inode->i_count)

linux - 高效排序 | uniq 用于大量重复的情况

Android:在存储 SD 卡上组织目录和文件的良好做法?

java - 从文件路径设置壁纸

c++ - Linux C++ : "Holes" in time sampling