比较两列并打印第二个文件中的第二列
I需要比较两个文件的前两列,如果结果相同,则需要将第一个文件的第二列打印到第一个文件中所有匹配的第二个文件的第二个文件中。比较两列并打印第二个文件中的第二列
输入:
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
它能做什么?
总之
在第二文件dumb_test
每行创建从在所述第一文件中的每一行的阵列first
,sample.txt
它检查如果第一字段是在第一,如果是附加第二式柱首先与行和打印。
龙
FNR==NR
确保了下面的命令仅适用于所述第一文件,sample.txt
first
是一个数组,这节省了各行内文件中的一个,sample.txt
并且使用被索引i
first[i]=$0
将整行复制到阵列中,然后递增索引i
NR!=FNR
确保了下面的命令excecuted为第二文件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]
是第一文件的两个柱
的如果检查line[1] == $1
这是文件一sample.txt
中的第一列等于第一列在第二文件dumb_test.csv
若有打印在第二文件中的整行,$0
appeded与第一文件的第二式柱,线[2]
print $0,line[2]
请解释这 – Marjer 2014-09-29 10:35:58
@Marjer编辑。希望能帮助到你 – nu11p01n73R 2014-09-29 10:51:19
是这样行吗你?
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
简单的两经过Python程序。首先检查匹配,seocond通过以产生所需的输出。使用Python的string.split(行,“,”)。 – Yotam 2014-09-29 08:40:41