Add Column base on other Column Data

HI Guys,

I want add one extra Column base on 3rd Column .

Input :-

M204	MS204_154	:vsDataUeMe	
M204	MS204_154	es:sMeasure	0
M204	MS204_154	es:90ilterCoe	9
M204	MS204_154	es:searchE9090ortTime	40
M204	MS204_154	es:servOrPrioI90HoTimer	4000
M204	MS204_154	es:ueMeajllls154545	TRUE
M204	MS204_154	:vsDataUeMe	
M204	MS204_154	:vsDataReport	
M204	MS204_154	es:hysteresisA1Prim	10
M204	MS204_154	es:timeToTriggerA1Prim	640
M204	MS204_154	:vsDataReport	
M204	MS204_154	:vsDataRep	
M204	MS204_154	es:a1ThrdRrSc	-113
M204	MS204_154	es:tmoigeASec	640
M204	MS204_154	:vsDataRep	

Output :-

M204	MS204_154	:vsDataUeMe	:vsDataUeMe	
M204	MS204_154	:vsDataUeMe	es:sMeasure	0
M204	MS204_154	:vsDataUeMe	es:90ilterCoe	9
M204	MS204_154	:vsDataUeMe	es:searchE9090ortTime	40
M204	MS204_154	:vsDataUeMe	es:servOrPrioI90HoTimer	4000
M204	MS204_154	:vsDataUeMe	es:ueMeajllls154545	TRUE
M204	MS204_154	:vsDataUeMe	:vsDataUeMe	
M204	MS204_154	:vsDataReport	:vsDataReport	
M204	MS204_154	:vsDataReport	es:hysteresisA1Prim	10
M204	MS204_154	:vsDataReport	es:timeToTriggerA1Prim	640
M204	MS204_154	:vsDataReport	:vsDataReport	
M204	MS204_154	:vsDataRep	:vsDataRep	
M204	MS204_154	:vsDataRep	es:a1ThrdRrSc	-113
M204	MS204_154	:vsDataRep	es:tmoigeASec	640
M204	MS204_154	:vsDataRep	:vsDataRep	

3rd Column have string which have same name, which i want add before 3rd Column.

Hi, try:

awk 'NF==3{s=$3}{$3=s OFS $3}1' OFS='\t' file

Thanks .....its working ...

if any row have 4th column blank then it giving me wrong output.

Input :-

M204	MS204_154	:vsDataUeMe	
M204	MS204_154	es:sMeasure	0
M204	MS204_154	es:90ilterCoe	9
M204	MS204_154	es:searchE9090ortTime	40
M204	MS204_154	es:servOrPrioI90HoTimer	4000
M204	MS204_154	es:ueMeajllls154545	TRUE
M204	MS204_154	:vsDataUeMe	
M204	MS204_154	:vsDataReport	
M204	MS204_154	es:hysteresisA1Prim	
M204	MS204_154	es:timeToTriggerA1Prim	
M204	MS204_154	:vsDataReport	
M204	MS204_154	:vsDataRep	
M204	MS204_154	es:a1ThrdRrSc	-113
M204	MS204_154	es:tmoigeASec	640
M204	MS204_154	:vsDataRep
M204	MS204_154	:vsDataUeMe	:vsDataUeMe	
M204	MS204_154	:vsDataUeMe	es:sMeasure	0
M204	MS204_154	:vsDataUeMe	es:90ilterCoe	9
M204	MS204_154	:vsDataUeMe	es:searchE9090ortTime	40
M204	MS204_154	:vsDataUeMe	es:servOrPrioI90HoTimer	4000
M204	MS204_154	:vsDataUeMe	es:ueMeajllls154545	TRUE
M204	MS204_154	:vsDataUeMe	:vsDataUeMe	
M204	MS204_154	:vsDataReport	:vsDataReport	
M204	MS204_154	hysteresisA1Prim	es:hysteresisA1Prim	
M204	MS204_154	hysteresisA1Prim	es:timeToTriggerA1Prim	
M204	MS204_154	:vsDataReport	:vsDataReport	
M204	MS204_154	:vsDataRep	:vsDataRep	
M204	MS204_154	:vsDataRep	es:a1ThrdRrSc	-113
M204	MS204_154	:vsDataRep	es:tmoigeASec	640
M204	MS204_154	:vsDataRep	:vsDataRep

That's Wrong .. I want only that data which have "vsData" String

OK, try:

awk '$3~/^:/{s=$3}{$3=s OFS $3}1' OFS='\t' file
1 Like

Perfect !!!!!!!!

This would really compare strings and not rely on field 3's structure:

awk '
!(REP)          {REP = $3
                 SKIP = 1
                }
                {TMP = $3
                 $3 = REP OFS $3
                }
!SKIP &&
TMP == REP      {REP = ""
                }
                {SKIP = 0
                }
1
' OFS="\t" file
M204    MS204_154    :vsDataUeMe    :vsDataUeMe
M204    MS204_154    :vsDataUeMe    es:sMeasure    0
M204    MS204_154    :vsDataUeMe    es:90ilterCoe    9
M204    MS204_154    :vsDataUeMe    es:searchE9090ortTime    40
M204    MS204_154    :vsDataUeMe    es:servOrPrioI90HoTimer    4000
M204    MS204_154    :vsDataUeMe    es:ueMeajllls154545    TRUE
M204    MS204_154    :vsDataUeMe    :vsDataUeMe
M204    MS204_154    :vsDataReport    :vsDataReport
M204    MS204_154    :vsDataReport    es:hysteresisA1Prim    10
M204    MS204_154    :vsDataReport    es:timeToTriggerA1Prim    640
M204    MS204_154    :vsDataReport    :vsDataReport
M204    MS204_154    :vsDataRep    :vsDataRep
M204    MS204_154    :vsDataRep    es:a1ThrdRrSc    -113
M204    MS204_154    :vsDataRep    es:tmoigeASec    640
M204    MS204_154    :vsDataRep    :vsDataRep