我想使用awk加入2个文件,文件可能无法排序

时间:2014-06-29 17:29:11

标签: awk

我有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

1 个答案:

答案 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记录。