gpt4 book ai didi

linux - 比较两列并打印第二个文件中的第二列

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:07 28 4
gpt4 key购买 nike

我需要比较两个文件的第一个两列,如果结果相等,则需要将第一个文件的第二列打印到第二个文件中,以获取第一个文件中的所有匹配项。

输入:

cat sample.txt
135,135-00
135,135-13
135,135-134
235,120-23
235,190-56

cat dump_test.csv
135,121,4,VA,date,date
135,128,6,VA,date,date
135,131,9,VA,date,date
235,128,10,date,date

输出文件:

cat output.txt
135,121,4,VA,date,date,135-00
135,128,6,VA,date,date,135-00
135,131,9,VA,date,date,135-00
135,121,4,VA,date,date,135-13
135,128,6,VA,date,date,135-13
135,131,9,VA,date,date,135-13
135,121,4,VA,date,date,135-134
135,128,6,VA,date,date,135-134
135,131,9,VA,date,date,135-134
235,128,10,date,date,120-23
235,128,10,date,date,190-56

最佳答案

$ awk -F, 'BEGIN{i=0}FNR==NR{first[i]=$0; i=i+1;}NR!=FNR{for(j=0;j<i;j++){split(first[j],line); if(line[1]==$1) print $0,line[2]}}' sample.txt dump_test.csv

135,121,4,VA,date,date 135-00
135,121,4,VA,date,date 135-13
135,121,4,VA,date,date 135-134
135,128,6,VA,date,date 135-00
135,128,6,VA,date,date 135-13
135,128,6,VA,date,date 135-134
135,131,9,VA,date,date 135-00
135,131,9,VA,date,date 135-13
135,131,9,VA,date,date 135-134
235,128,10,date,date 120-23
235,128,10,date,date 190-56

它有什么作用?

简而言之

根据第一个文件 sample.txt 中的每一行创建一个数组 first

对于第二个文件 dumb_test 中的每一行,它检查第一个字段是否在 first 中,如果是,则将第二列附加到 first 中并打印。

FNR==NR 确保以下命令仅适用于第一个文件 sample.txt

first 是一个数组,它将每一行保存在文件 one,sample.txt 中,并使用 i

进行索引

first[i]=$0 将整行复制到数组中,并递增索引 i

NR!=FNR 确保为第二个文件 dumb_test.csv

执行以下命令

for 遍历数组 first,即第一个文件中的行。

split(first[j],line)first[i]放入数组line

例如当 first[0] = 135,135-00

split(first[0], line) 使 line[1] = 135line[2] = 135-00这里 line[1] 是第一列,line[2] 是第一个文件的第二列

if 检查 line[1] == $1 即文件 1 sample.txt 中的第一列等于第二个文件 中的第一列dumb_test.csv

如果是,则打印第二个文件中的整行,$0 加上第一个文件的第二列,第 [2] 行

打印 $0,line[2]

关于linux - 比较两列并打印第二个文件中的第二列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26095641/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com