在shell脚本中,如何用另一个文件中的值替换文件中某个字段(列)的特定值?

2024-05-13 10:39:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件,比如A.txt和B.txt。A、 txt有三列,如下所示

0 0 17
0 1 17
0 2 4
0 3 50
0 4 90 
....
.... 

我必须用保存在B.txt中的对应映射值替换第三列值,如下所示

^{pr2}$

B.txt中第一列的值与A.txt中第三列的值相同,我需要创建一个新文件(例如C.txt),其前两列与A.txt相同,但第三列包含相应的映射值。 C.txt示例如下所示

0 0 5, 0 1 5, 0 2 1, 0 3 8, 0 4 11号, ..., ... 在

注意

我有40万个文件要做这个操作所以速度很重要。我已经为此编写了一个程序,但运行速度很慢。如果不创建新文件(C.txt),替换可以节省时间,那么解决方案也是可以接受的。在

while read line
do

     origPhoneme=`echo $line| cut -d " " -f3` 
     while read mapLine
     do
        mapPhone=`echo $mapLine | cut -d " " -f1`
        replacementPhone=`echo $mapLine | cut -d " " -f2`
        if [ $mapPhone == $origPhoneme ]
        then
             echo $replacementPhone >> checkFile
             break
        fi
     done < B.txt
done< A.txt

粘贴-d“”A.txt检查文件>;C.txt

通过使用此代码,C.txt文件包含了我不想要的A.txt的第三列


Tags: 文件echotxtreadlinedo速度cut
1条回答
网友
1楼 · 发布于 2024-05-13 10:39:53

Python(或shell脚本)应该足够快——您的任务主要受I/O速度的限制,而不是处理速度。在

我建议Python这样做:

B.txt读入字典以快速查找:

with open("B.txt") as file:
    B = dict(line.strip().split() for line in file)

然后处理A.txt,创建C.txt

^{pr2}$

相关问题 更多 >