使用awk根据数据将文件拆分为不同的部分

时间:2014-08-08 21:05:15

标签: bash awk

我需要使用awk根据4美元的数据拆分文件1中的数据。目标文件名应取自映射文件2。

档案1

  

文本;文本;文本; AB;文本
  文本,文本,文本; AB;文本
  文本,文本,文本; CD;文本
  文本,文本,文本; CD;文本
  文本,文本,文本; EF;文本
  文本;文本;文本; EF;文本

文件2

  

AB;有效
  CD; not_valid
  EF; not_specified

所需的输出,其中文件名是文件2中$ 2的值。

文件有效

  

文本;文本;文本; AB;文本
  文本;文本;文本; AB;文本

文件not_valid

  

文本;文本;文本; CD;文本
  文本;文本;文本; CD;文本

文件not_specified

  

文本;文本;文本; EF;文本
  文本;文本;文本; EF;文本

有关如何执行拆分的任何建议?

2 个答案:

答案 0 :(得分:3)

使用awk

awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}
           $4 != p {if (p) close(a[p]); p=$4}' file2 file1

答案 1 :(得分:0)

似乎只是代码的第一部分可以工作:

awk -F';' 'FNR==NR {a[$1]=$2;next} $4 in a {print > a[$4]}' file2 file1 

那么,为什么后半部分代码:

$4 != p {if (p) close(a[p]); p=$4

需要吗?谢谢!