我有2个文件。 第一个档案:
1,10000,abc,hello,cust
2,123,bib,hi,cust1
3,34562,acb,bye,cust2
第二档
b231,3,231
w123,1,111
我想使用基于第一个文件中第1列的awk命令加入上述2个文件。第二个文件中的第二列和输出应采用以下格式。我需要第一个文件中的所有记录,第二个文件中的第一个字段是输出文件中的第4个字段。应丢弃第一个文件中的第一个字段。我试过加入,但我总是将第4场视为空。所以考虑使用awk找到解决方案。请解释一下解决方案。 注意:文件大小为GB。 输出文件格式
10000,abc,hello,b231,cust
123,bbb,hi,,cust1
34562,acb,bye,w123,cust2
答案 0 :(得分:1)
您可以使用awk
执行此操作:
awk -F, 'BEGIN{OFS=","} FNR==NR {p[$2]=$1;next} {if(p[$1])print $2,$3,$4,p[$1],$5; else print $2,$3,$4,"",$5}' file2 file1
<强>解释强>
-F, - sets the input field separator to a comma
BEGIN{OFS=","} - sets the output field separator to a comma at the start
FNR==NR{...} - remembers second field of file2 in array p[] indexed by first field
脚本的其余部分检查file1中的每一行,看看我们是否在file2中看到了它的第一个字段。如果我们这样做,它会打印字段2,3,4,数组p []和字段5中的相应元素。如果我们没有看到file2中的第一个字段,它只会打印带有额外逗号的curremt记录。