关于python:比较2个文件并在匹配后将一个值从file1附加到file2的末尾 | 珊瑚贝

compare 2 files and append a value from file1 to end of file2 after match


我必须将 FILE1 的 Column1 与 FILE2 的值匹配,如果匹配,请将 FILE1 中的 Column3 附加到 FILE2 中每一行的末尾。

我在下面提供了示例,感谢您提供任何帮助。

文件1

1
2
3
405869000009306,917010120346,3535080769880902
405869000013492,917010130771,8687780205056100
405869000014438,917010132781,8626280378318000

文件2

1
2
3
4
5
9,=5|0|Pay,=,=,=1|1|918438953359,+918438953359@,=405869000009306,=20180304060000804+0530,=0,=0,=140,=0,=25,=0,=180304055956+22,=199,=1,=1,=-e-894316-e367d-5a9b3e08-98b90,+918438953359@,=1|1|917019075052,=1|1|917010075000,=,=,=,=,=icid-value=14.137.67-1520123400.11094809;icid-generated-at;orig-ioi,

8,=1|1|918667657858,+918667657858@,=405869000013492,=1|1|919894455911,=,=,=20180304060000740+0530,=0,=1,=2,=0,=0,=0,=000000000000+00,=0,=1,=1,=1567756633_2338487864@2405:204:7a4e:2019:f339:d39b:1e12:915e,=sip:tn1ipsxm001.ims.mnc869.mcc405.3gppnetwork.org,=1|1|917010075000,=1|1|917010075009,mnc,=3GPP-E-UTRAN-FDD;405869006D039F831,=,=,=icid-value=11.274.6905-1520123400.57776869;icid-generated-at;orig-ioi,

输出

1
2
3
4
5
9,=5|0|Pay,=,=,=1|1|918438953359,+918438953359@,=405869000009306,=20180304060000804+0530,=0,=0,=140,=0,=25,=0,=180304055956+22,=199,=1,=1,=-e-894316-e367d-5a9b3e08-98b90,+918438953359@,=1|1|917019075052,=1|1|917010075000,=,=,=,=,=icid-value=14.137.67-1520123400.11094809;icid-generated-at;orig-ioi,3535080769880902

8,=1|1|918667657858,+918667657858@,=405869000013492,=1|1|919894455911,=,=,=20180304060000740+0530,=0,=1,=2,=0,=0,=0,=000000000000+00,=0,=1,=1,=1567756633_2338487864@2405:204:7a4e:2019:f339:d39b:1e12:915e,=sip:tn1ipsxm001.ims.mnc869.mcc405.3gppnetwork.org,=1|1|917010075000,=1|1|917010075009,mnc,=3GPP-E-UTRAN-FDD;405869006D039F831,=,=,=icid-value=11.274.6905-1520123400.57776869;icid-generated-at;orig-ioi,8687780205056100

  • 请添加您尝试过的代码
  • 请注意,您的示例不清楚,请将您的代码package在 CODE TAGS 中。
  • 我用这个。但匹配的值不会附加在每行的末尾。
  • awk -F, -v OFS=, \\’NR==FNR{a[$1]=$4;下一个}{打印 $0,a[$28]}\\’ 文件 1 文件 2


您好,请使用以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
file1 = open(“input1.txt”,“r”)
file2 = open(“input2.txt”,“r”)

file2_array = [data for data in file2]

file = open(“output.txt”,“a”)
for row in file1:
    element_to_check = row.split(“,”)[0]
    for row_to_check in file2_array:
        if element_to_check in row_to_check:
            file.write(‘%s,%s’%(row_to_check, row.split(“,”)[2]) + \
)

此代码从两个输入文件中读取(我假设为文本文件),然后比较数据,如果满足条件,则将代码附加到该行并将其写入输出文件。

  • 非常感谢 Subrajyoti Das,Waveter。两个脚本都运行良好。
  • 我正在使用 awk 并且它失败了……你能帮助纠正正在使用的命令来获得类似的输出吗?


你可以试试下面的shell脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
content1=`cat file1`
while read line2; do
        found=0
        for line1 in $content1; do
                first_column=`echo $line1|awk -F ‘,’ ‘{print $1}’`
                if [[ $line2 = *“$first_column”* ]]; then
                        third_column=`echo $line1|awk -F ‘,’ ‘{print $3}’`
                        echo $line2.$third_column
                        found=1
                        break
                fi
        done;
        if [[ $found == 0 ]]; then
                echo $line2;
        fi
done < file2
  • 嗨,运行 python 脚本后,column3 值将添加下一行和另一个 “,”。我尝试删除 “,” ,但出现语法错误..有没有办法解决这个问题?
  • file.write(\\’%s %s\\’%(row_to_check row.split(“,”)[2]) \\’\\\\
    \\’) ^ SyntaxError: 无效的语法
  • 这是使用 python 的输出,其中值与下一行和额外的逗号相加。
  • 9,5|0|支付,,,1|1|918438953359, 918438953359@,405869000009306,??20180304060000804 05??30,0,0,140,??0,25,0,18??0304055956 22,199,1,?? ,-e-89-43-16-e367d-??5a9b3e08-98b90, 9184??38953359@,1|1|917019??075052,1|1|917010075??000,,,,,icid-value14? ?.137.67-1520123400.1??1094809;icid-genrat??ed-at;orig-ioi, ,3535080769880902
  • 当我为具有 1000 行的文件运行 shell 脚本时,我看到只执行了 2 行并且脚本挂起
  • 我更新了脚本。大文件可能会很慢,但我认为它不会挂起


来源:https://www.codenong.com/49443251/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?