在 csv 文件中搜索第二列中特定文本的关注编号

在 csv 文件中搜索第二列中特定文本的关注编号

我有两个主要的 csv 文件如下:

文件1.csv

731,dev-servers.com.,A,192.168.0.10
598,test-servers.com.,A,192.168.0.12
599,test1-servers.com.,A,192.168.0.11

文件2.csv

dev-servers.com.,A,192.168.0.10
test-servers.com.,A,192.168.0.12
test1-servers.com.,A,192.168.0.11

我正在寻找命令来在 column2(file1) 和 column1(file2) 中搜索并找到适当的正确值并添加到 file2。

预期输出:

文件2.csv

731,dev-servers.com.,A,192.168.0.10
598,test-servers.com.,A,192.168.0.12
599,test1-servers.com.,A,192.168.0.11

答案1

假设 file1.csv 包含以下内容:

731,dev-servers.com.,A,wrong IP1
598,test-servers.com.,B,wrong IP2
599,test1-servers.com.,C,wrong IP3

并且 file2.csv 包含内容(示例的复制粘贴):

dev-servers.com.,A,192.168.0.10
test-servers.com.,A,192.168.0.12
test1-servers.com.,A,192.168.0.11

以下 Python 脚本将打印您所期望的内容:

numbers = {}

for lines in open("file1.csv"):
    columns = lines.strip().split(",")
    name = columns[1]
    numbers[name] = columns[0]
    
for lines in open("file2.csv"):
    columns = lines.strip().split(",")
    name = columns[0]
    try:
        print("{},{},{},{}".format(numbers[name],columns[0],
                                   columns[1],columns[2] ))
    except KeyError:
        print("{},{},{},{}".format('"?"',columns[0],
                                   columns[1],columns[2] ))

(根据您的发行版更改第一行:python 或 python3)。

这里,file2.csv 的每一行都打印了一个从 file1.csv(相同的服务器名称)中获取的编号。"?"如果找不到该编号,则会打印。

答案2

以下是纯 Bash 脚本解决方案的示例:

#!/bin/bash

while IFS=',' read -r col1 col2
do
   sed -i "s/^$col2,/$col1,$col2,/" file2.csv
done < <(cut -d ',' -f 1,2 file1.csv)
  • cut -d ',' -f 1,2 file1.csvfile1.csv-根据,分隔符剪切文件的前两列
  • while IFS=',' read -r col1 col2- 将 2 个剪切列读入$col1$col2变量
  • sed -i "s/^$col2,/$col1,$col2,/" file2.csv- 如果一行以找到的主机信息开头,则在其前面$col2添加数字信息$col1

$col2根据数据,可能需要转义。查看更多信息

相关内容