Replace 2nd column in file


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Replace 2nd column in file
# 1  
Old 12-16-2012
Replace 2nd column in file

I have following entries file abc.txt

Code:
abc83.out.remote           TRUE
abc84.out.remote           TRUE
abc85.out.remote           TRUE
abc86.out.remote           TRUE

Please help me, how do i toggle the entries listed in 2nd column based on the search patterns (abcxx)

abcxx, i can get using for loop, my problem is to replace the corresponding 2nd column entries (TRUE/FALSE)
Creating a tmp file for this is not a problem. Also. 3 tab spaces after 1st column should be preserved after replacing TRUE with FALSE or vice versa.
Please help

Last edited by sdosanjh; 12-16-2012 at 09:27 PM..
# 2  
Old 12-16-2012
I'm sure not sure what exactly you want to check in file: abc.txt Just to give you an idea, in below program I'm using awk to check if 1st column is abc83.out.remote if yes, then keep 2nd column as TRUE else change it to FALSE by preserving 3 tab spaces:-
Code:
awk '$1=="abc83.out.remote" { print $1"\t\t\tTRUE" } $1!="abc83.out.remote" { print $1"\t\t\tFALSE" } ' abc.txt

You can modify this code as per your requirement. I hope this helps.
This User Gave Thanks to Yoda For This Post:
# 3  
Old 12-16-2012
Quote:
Originally Posted by bipinajith
I'm sure not sure what exactly you want to check in file: abc.txt Just to give you an idea, in below program I'm using awk to check if 1st column is abc83.out.remote if yes, then keep 2nd column as TRUE else change it to FALSE by preserving 3 tab spaces:-
Code:
awk '$1=="abc83.out.remote" { print $1"\t\t\tTRUE" } $1!="abc83.out.remote" { print $1"\t\t\tFALSE" } ' abc.txt

You can modify this code as per your requirement. I hope this helps.

Thanks bipinajith
But, will it work, if original file has not 3 tab spaces.
otherway, if original file doesn't have 3 tab spaces, then how do i search and replace, because, above
Code:
awk

will search for fixed pattern only.

to check if 1st column is abc83.out.remote if yes, then change the 2nd column to FALSE
there is no else case. if TRUE is found against abc83.out.remote, then change the second col to FALSE
# 4  
Old 12-16-2012
You need read AWK user guide again, I don't see any parts in AWK and tell you

Code:
awk will search fixed pattern only.

# 5  
Old 12-17-2012
Tried the below nawk and it worked, but still i have one issue pending
if i use "for" loop to get "abcxx" then it displays multiple entries.

Code:
nawk -v col=2 -v val="TRUE" -v valN="\t\t\tFALSE\t\t\t" '$col == val {$col = valN}1' /tmp/test

# 6  
Old 12-17-2012
Quote:
Originally Posted by sdosanjh
Tried the below nawk and it worked, but still i have one issue pending
if i use "for" loop to get "abcxx" then it displays multiple entries.

Code:
nawk -v col=2 -v val="TRUE" -v valN="\t\t\tFALSE\t\t\t" '$col == val {$col = valN}1' /tmp/test

I think we have a language barrier. Your specification of what you want done is not clear.

You say you want to match abcxx, but none of your input lines contains the string "abcxx".

You say that you want to change the second column, but you say that there are three tab spaces (whatever that means) and that the tab spaces have to be preserved. If you mean that there are three tab characters between the 1st field and the field that contains TRUE and that you want each tab character to be treated as a field separator, then say that the tab character is your field separator and you want the 4th field set to TRUE if abcxx appears in field 1 and you want the 4th field set to FALSE if abcxx does not appear in field 1.

If by abcxx you mean that you want to match the string "abc" immediately followed by two decimal digits, then you need to match against "abc[0-9][0-9]"
instead of matching against "abcxx".

And, awk (nawk on Solaris systems) matches extended regular expressions, not just fixed strings.
----------------
And, I forgot to ask why you need a for loop to get the constant "abcxx"???

Last edited by Don Cragun; 12-17-2012 at 01:30 AM.. Reason: Forgot about for loop question.
# 7  
Old 12-17-2012
Ok let me try re-phrase.

i have file with following entries

Code:
% cat /tmp/test
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn           TRUE                               write


When i try to get TSCmergexx list using "for" loop and try to match pattern, then i get the below output.

Code:
% for i in TSCmerge77 TSCmerge78 TSCmerge79 TSCmerge80 TSCmerge100 TSCmerge101; do cat /tmp/test |  nawk -v col1=1 -v colval="$i.Merge.out.remoteOn" -v col=2 -v val="TRUE" -v valN="\t\t\tFALSE\t\t\t" '$col1 == colval &&  $col == val {$col = valN}1'; done
TSCmerge77.Merge.out.remoteOn                   FALSE                    write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn           TRUE                               write
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn                   FALSE                    write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn           TRUE                               write
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn                   FALSE                    write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn           TRUE                               write
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn                   FALSE                    write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn           TRUE                               write
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn                  FALSE                    write
TSCmerge101.Merge.out.remoteOn           TRUE                               write
TSCmerge77.Merge.out.remoteOn           TRUE                               write
TSCmerge78.Merge.out.remoteOn           TRUE                               write
TSCmerge79.Merge.out.remoteOn           TRUE                               write
TSCmerge80.Merge.out.remoteOn           TRUE                               write
TSCmerge100.Merge.out.remoteOn           TRUE                               write
TSCmerge101.Merge.out.remoteOn                  FALSE                    write

whereas, i just want the lines that are "FALSE" not TRUE.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Compare 1st column from 2 file and if match print line from 1st file and append column 7 from 2nd

hi I have 2 file with more than 10 columns for both 1st file apple,0,0,0...... orange,1,2,3..... mango,2,4,5..... 2nd file apple,2,3,4,5,6,7... orange,2,3,4,5,6,8... watermerlon,2,3,4,5,6,abc... mango,5,6,7,4,6,def.... (1 Reply)
Discussion started by: tententen
1 Replies

2. Shell Programming and Scripting

Match column 8 in file 1 with column 2 in file 2 and replace..

I am looking at the NR==FNR posts and trying to use them to achieve the following but I am not getting it. I have 2 files. I want to match column 8 in file 1 with column 2 in file 2. When they match I want to replace column 9 in file 1 with column 1 in file 2. This is and extract from file 1 ... (5 Replies)
Discussion started by: kieranfoley
5 Replies

3. Shell Programming and Scripting

Replace 2nd Column

Dear All, I have data like this, input.txt A 0B 1828 C 100D 1666,C 200D 1727,C 300D 1783, A 0B 1786 C 200D 1727,C 100D 1666,C 300D 1783, C 400D 1812,C 600D 1869,C 500D 1841, C 400D 1812,C 500D 1841,C 600D 1869, A 0B 1349 C 200D 1727,C 300D 1783,C 100D... (1 Reply)
Discussion started by: attila
1 Replies

4. Shell Programming and Scripting

Change the text in 2nd column in file

Legends, I have following entries in a file. I want to toggle the entry of 2nd column. TRUE/FALSE i tried using perl -p -i -e but the problem is, if instead of "tab" space after 1st column, there is a character or multi character space then this won't work. perl -p -i -e... (6 Replies)
Discussion started by: sdosanjh
6 Replies

5. Shell Programming and Scripting

Replace column that matches specific pattern, with column data from another file

Can anyone please help with this? I have 2 files as given below. If 2nd column of file1 has pattern foo1@a, find the matching 1st column in file2 & replace 2nd column of file1 with file2's value. file1 abc_1 foo1@a .... abc_1 soo2@a ... def_2 soo2@a .... def_2 foo1@a ........ (7 Replies)
Discussion started by: prashali
7 Replies

6. Shell Programming and Scripting

Replace 2nd column for each line in a csv file with fixed string+random number

Hi experts, My csv file looks like this U;cake;michael;temp;;;; U;bread;john;temp;;;; U;cocktails;sarah;temp;;;; I'd like to change the value fo 2nd column to cf+random number , which will look maybe something like this U;cf20187;michael;temp;;;; U;cf8926;john;temp;;;;... (7 Replies)
Discussion started by: tententen
7 Replies

7. Shell Programming and Scripting

Replace 2nd column of CSV file with numbers on line

I have a csv file with occasional multiple entries in the second column. 111111,104,07-24-2011,3.15,N, 222222,020 140,07-24-2011,10.00,N,I want the result 111111,104,07-24-2011,3.15,N, 222222,020,07-24-2011,10.00,N, 222222,140,07-24-2011,10.00,N, I know I can get the output of the second... (5 Replies)
Discussion started by: ffdstanley
5 Replies

8. Shell Programming and Scripting

comparing column of two different files and print the column from in order of 2nd file

Hi friends, My file is like: Second file is : I need to print the rows present in file one, but in order present in second file....I used while read gh;do awk ' $1=="' $gh'" {print >> FILENAME"output"} ' cat listoffirstfile done < secondfile but the output I am... (14 Replies)
Discussion started by: CAch
14 Replies

9. Shell Programming and Scripting

Replace column with column from another file

Hello, I am trying to replace the column in file1 with the column from file2. The two files will have the same amount of rows. Each row will correspond with the same row in the other file. File1 "Replace this column" 500 13-APR-2011... (11 Replies)
Discussion started by: doobe01
11 Replies

10. Shell Programming and Scripting

Match column 3 in file1 to column 1 in file 2 and replace with column 2 from file2

Match column 3 in file1 to column 1 in file 2 and replace with column 2 from file2 file 1 sample SNDK 80004C101 AT XLNX 983919101 BB NETL 64118B100 BS AMD 007903107 CC KLAC 482480100 DC TER 880770102 KATS ATHR 04743P108 KATS... (7 Replies)
Discussion started by: rydz00
7 Replies
Login or Register to Ask a Question