eh2deni
eh2deni

Reputation: 69

Split file into different parts based on the data using awk

I need to split the data in file 1 based on it´s data in $4 using awk. The target file-names should be taken from a mapping file 2.

File 1

text;text;text;AB;text
text;text;text;AB;text
text;text;text;CD;text
text;text;text;CD;text
text;text;text;EF;text
text;text;text;EF;text

File 2

AB;valid
CD;not_valid
EF;not_specified

Desired output where the file names are the value of $2 in file 2.

File valid

text;text;text;AB;text
text;text;text;AB;text

File not_valid

text;text;text;CD;text
text;text;text;CD;text

File not_specified

text;text;text;EF;text
text;text;text;EF;text

Any suggestions on how to perform the split?

Upvotes: 0

Views: 113

Answers (2)

JeffZheng
JeffZheng

Reputation: 1405

It seems that just the first part of the code will work:

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

So, why the last half code:

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

is needed? Thanks!

Upvotes: 0

anubhava
anubhava

Reputation: 785146

Using 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

Upvotes: 3

Related Questions