我需要比较两个文件的前两列,如果结果相同,则需要将第一个文件的第二列打印到第一个文件中所有匹配的第二个文件中。
输入:
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
答案 0 :(得分:2)
这对你好吗?
join -t',' test sample
输出:
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
答案 1 :(得分:2)
$ 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
它做什么?
简而言之
从第一个文件first
sample.txt
对于第二个文件dumb_test
中的每一行,它检查第一个字段是否在第一个字段中,如果是,则将第二个列首先附加到该行并打印。
长
FNR==NR
确保以下命令仅适用于第一个文件sample.txt
first
是一个数组,用于保存文件1中的每一行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] = 135
和line[2] = 135-00
这里line[1]
是第一列,line[2]
是第一个文件的第二列
if检查文件一line[1] == $1
中第一列的sample.txt
是否等于第二个文件中的第一列dumb_test.csv
如果是,则在第二个文件中打印整行,$0
附加第一个文件的第二个列,行[2]
print $0,line[2]