Replace a column in tab delimited file with column in other tab delimited file,based on match

Hello Everyone..

I want to replace the retail col from FileI with cstp1 col from FileP if the strpno matches in both files

FileP.txt

rectyp	stckno	strpno	prcname	prccode	pfxcode	startdt	enddt	fcpgno	cstq1	cstp1	cstp3	cstp4	vndrop	leadtime	autoord	prjctnum	future1	pcstq1	pcstc1	pcstq2	pcstc2	pcstq3	pcstc3	future2	saleq1	salep1	saleq2	salep2	saleq3	salep3	shiplt	catlist2
P	AAG122-200	AAG122200	GL Catalog Consumer Prices-SC	LB		4012016	12312016	438	1	1372	1372	1372		1	1035	1	1035	1	1035		1	1769	1	1769	1	1769		1769	EA	DNC	N	Y
P	AAG122-905	AAG122905	GL Catalog Consumer Prices-SC	LB		4012016	12312016	438	1	1542	1542	1542		1	1163	1	1163	1	1163		1	1979	1	1979	1	1979		1979	EA	DNC	N	Y

FileI.txt

rectyp	stckno	strpno	pdesc	pstat	nitem	suom	ccpgno	flpgno	fcpgno	unused1	unused2	pkgqty1	pkguom1	pkduom1	pkgqty2	pkguom2	pkduom2	pkgqty3	pkguom3	pkduom3	weight	height	length	width	prclcd	country	rta	recycle	upsok	brkitm	retail	ruom	rpack	hazmat	subitems	oitem	catlist	catuom	minvnd	custom	dtdgoods	qsuom	nrtnable	alwaysnet	special
I	AAG122-200	AAG122200	PLANNER,WK/MTH,VIENNA,8.5X5	C		EA	438					3	EA	PK	4	PK	CT	0			50	850	60	540	ECAB	CN	N	Y	Y	N	1859	EA	1	N			1859	EA	N	N	Y	1	Y	N	N
I	AAG122-905	AAG122905	PLANNER,WK/MTH,VIENNA,11X9	C		EA	438					3	EA	PK	4	PK	CT	0			114	1110	60	960	ECAB	CN	N	Y	Y	N	2389	EA	1	N			2389	EA	N	N	Y	1	Y	N	N

Expected Output:

rectyp	stckno	strpno	prcname	prccode	pfxcode	startdt	enddt	fcpgno	cstq1	retail	cstp3	cstp4	vndrop	leadtime	autoord	prjctnum	future1	pcstq1	pcstc1	pcstq2	pcstc2	pcstq3	pcstc3	future2	saleq1	salep1	saleq2	salep2	saleq3	salep3	shiplt	catlist2	catuom2	prcid	firm	net
P	AAG122-200	AAG122200	GL Catalog Consumer Prices-SC	LB		4012016	12312016	438	1	1859	1372	1372		1	1035	1	1035	1	1035		1	1769	1	1769	1	1769		1769	EA	DNC	N	Y				
P	AAG122-905	AAG122905	GL Catalog Consumer Prices-SC	LB		4012016	12312016	438	1	2389	1542	1542		1	1163	1	1163	1	1163		1	1979	1	1979	1	1979		1979	EA	DNC	N	Y	

1372--replaced with 1859
1542--replaced with 2389

Code I have been trying:

 awk  'NR==FNR{A[$3]=$32; next} $3 in A{$11=A[$3]}1' FS='\t' FileI.txt FileP.txt > output2.txt 

Output for above code:

rectyp stckno strpno prcname prccode pfxcode startdt enddt fcpgno cstq1 retail cstp3 cstp4 vndrop leadtime autoord prjctnum future1 pcstq1 pcstc1 pcstq2 pcstc2 pcstq3 pcstc3 future2 saleq1 salep1 saleq2 salep2 saleq3 salep3 shiplt catlist2 catuom2 prcid firm net
P AAG122-200 AAG122200 GL Catalog Consumer Prices-SC LB  4012016 12312016 438 1 1859 1372 1372  1 1035 1 1035 1 1035  1 1769 1 1769 1 1769  1769 EA DNC N Y    
P AAG122-905 AAG122905 GL Catalog Consumer Prices-SC LB  4012016 12312016 438 1 2389  15421542  1 1163 1 1163 1 1163  1 1979 1 1979 1 1979  1979 EA DNC N Y   

Above output looks correct, but the tabs are not retained anymore,when I open output2.txt in excel.Output file is not tab delimited file.

I'm a newbie in Linux. Any help will be appreciated.!

Add variable OFS='\t'

--- Post updated at 11:12 ---

Conveniently view output
awk ... | cat -vet

1 Like

Thanks nezabudka. It worked.!! :slight_smile:

1 Like