I am trying to combine two files as below (Intersection)
ID Name Telephone
1 John 011
2 Sam 013
3 Jena 014
4 Peter 015
Second file Test2.txt
1 Test1 Test2
2 Test3 Test4
3 Test5 Test6
4 Test7 Test8
5 Test7 Test8
6 Test7 Test8
7 Test7 Test8
8 Test7 Test8
9 Test7 Test8
Then Final result
ID Name Telephone Remark1 Remark2
1 John 011 Test1 Test2
2 Sam 013 Test3 Test4
3 Jena 014 Test5 Test6
4 Peter 015 Test7 Test8
I did like this as below,
awk -F"\t" '
{key = $1 }
NR == 1 {header = key}
!(key in result) {result[key] = $0; next}
{ for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
END {
print result[header]
delete result[header]
PROCINFO["sorted_in"] = "@ind_str_asc"
for (key in result) print result[key]
}
' Test1.txt Test2.txt > result.txt
And I just notice that this is Union set. Including all data Test1 and Test2.
I would like to show only for Intersection case as what I expected result. (1, 2 ,3 ,4) only
Do you guys have any idea? Thanks!
Another alternative would be
pr
which is used for formating files to print.The most important is the
m
flag which merges files into columns. Thet
flag removes headers and footers - since we're not going to print on paper, we don't need them. The lastw
flag is for setting width.It is far easier to use the
join
command:Use the
column
command to pretty print it: