Visit The New, Modern Unix Linux Community


Creating values based on position


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Creating values based on position
# 1  
Creating values based on position

How i create a value by comparing the data from specific field and fetch particular character from other column.
For example i want to compare the 3rd field and fetch 4th character from last column, say if 3rd column have 'bcd' then fetech "i" and append the same "i" as last column if data doesn't match then do nothing. all columns separated by delimiter comma.

Code:
abcd,123,bcd,4342337,sjeikfmerielafllfoe
das,344,edc,43453,erewmferm
mefefe,242,bcd,4354646757,kewjfoefgomlrewfp

Required out put
Code:
abcd,123,bcd,4342337,sjeikfmerielafllfoe,i
das,344,edc,43453,erewmferm
mefefe,242,bcd,4354646757,kewjfoefgomlrewfp,j

# 2  
The usual questions:


Which OS are you using?
What are your preferred tools/utilities/shells/languages?


And most of all what have you tried?
This User Gave Thanks to wisecracker For This Post:
# 3  
Thanks for the reply.
Linux 4.4.180-94.113-default #1 SMP Fri Dec 13 14:20:57 UTC 2019 (c6649f6) x86_64 x86_64 x86_64 GNU/Linux

I tried to fetch 3rd column using awk and cut , but having difficulty to compare the data with 'bcd' and fetching specific character from last column and append as last column with delimiter.

cut -d"," filename | sort -u

Last edited by zooby; 03-10-2020 at 08:16 AM..
# 4  
Hi
The string must be changed. Tools like awk, sed, and a shell script in the built-in programming language are suitable
This example on 'sed'
Code:
sed -r 's/([^,]*,){2}bcd,.*,(.){4}.*/&,\2/'

REMARK:
I forgot to indicate the anchor ^ of the beginning of the line,
only then the pattern of 'bcd' will exactly correspond to the third field by the comma separator
Code:
sed -r 's/^([^,]*,){2}bcd,.*,(.){4}.*/&,\2/'


Last edited by nezabudka; 03-10-2020 at 08:30 AM..
This User Gave Thanks to nezabudka For This Post:
# 5  
Quote:
Originally Posted by nezabudka
...
REMARK:
I forgot to indicate the anchor ^ of the beginning of the line,
only then the pattern of 'bcd' will exactly correspond to the third field by the comma separator
Code:
sed -r 's/^([^,]*,){2}bcd,.*,(.){4}.*/&,\2/'


And, the .* would allow for one or more comma-separated fields, both in the middle as well as at line end. You might want to anchor the regex at line end, too. Proposal (untested)


Code:
sed -r 's/^([^,]*,){2}bcd,.*,([^,]){4}[^,]*$/&,\2/'

This User Gave Thanks to RudiC For This Post:
# 6  
Hi, @RudiC
Code:
sed -r 's/^([^,]*,){2}bcd,.*,(.){4}.*/&,\2/'

The marked greedy expression contains all the available fields except the last one,
which means that in the positions noted by you, the comma simply cannot appear.
In addition, this makes the pattern more flexible.
There is no condition in the task how many fields will be, there are only 3 fields and the last.
The last greedy expression also makes the end of line anchor '$' unnecessary.
I apologize in advance if I could not convey my thinks accurate,
but of course I could be wrong
Thanks

--- Post updated at 17:18 ---

Just what you specify would make sense with the hard setting of the number of fields
Code:
sed -r 's/^([^,]*,){2}bcd,[^,]*,([^,]){4}[^,]*$/&,\2/'

This User Gave Thanks to nezabudka For This Post:
# 7  
@nezabudka: You are right if the last field is well-formed, i.e. >= 4 chars. Compare the versions for the case of last field < 4 char...
This User Gave Thanks to RudiC For This Post:

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #665
Difficulty: Easy
In 2000, Microsoft cofounder Bill Gates relinquished his role as CEO of Microsoft to Steve Baltimore.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Search for a string at a particular position and replace with blank based on position

Hi, I have a file with multiple lines(fixed width dat file). I want to search for '02' in the positions 45-46 and if available, in that lines, I need to replace value in position 359 with blank. As I am new to unix, I am not able to figure out how to do this. Can you please help me to achieve... (9 Replies)
Discussion started by: Pradhikshan
9 Replies

2. Shell Programming and Scripting

Find and count unique date values in a file based on position

Hello, I need some sort of way to extract every date contained in a file, and count how many of those dates there are. Here are the specifics: The date format I'm looking for is mm/dd/yyyy I only need to look after line 45 in the file (that's where the data begins) The columns of... (2 Replies)
Discussion started by: ronan1219
2 Replies

3. Shell Programming and Scripting

How to generate a csv files by separating the values from the input file based on position?

Hi All, I need help for doing the following. I have a input file like: aaaaaaaaaabbbbbbbbbbbbbbbbbbbb cccbbbbbaaaaaadddddaaaabbbbbbb now I am trying to generate a output csv file where i will have for e.g. 0-3 chars of each line as the first column in the csv, 4-10 chars of the line as... (3 Replies)
Discussion started by: babom
3 Replies

4. Programming

C program - convert values based on the position

Hey! I'm new to C. I need to covert certain values using C. please see the below. I have figured out the logic to do it. Please provide some hints to do this with C Logic: If first position of POS = 0, shift POS to the left one byte. If third position of POS = 0, move spaces to third... (1 Reply)
Discussion started by: rocker_me2002
1 Replies

5. Shell Programming and Scripting

Extract data based on position

The file has record length 200. And i have 100 search strings which are ten digits of character from 1 to 10 characters all of them are unique, they need to searched in a file. Please help me to pull the records based on position (say from 1-10). test data 1FAHP2DW0BG115206RASHEED ... (6 Replies)
Discussion started by: zooby
6 Replies

6. UNIX for Dummies Questions & Answers

Replace based on an exact position

Trying to use sed - but having no luck. I have a text file - I want to replace whatever character is in position 106, 157 and 237 w/ the string "xxx". Want this change for all lines w/in that text file. I'm open to using awk or whatever command would be best for replacing characters based... (5 Replies)
Discussion started by: svn
5 Replies

7. Shell Programming and Scripting

How to pick values from column based on key values by usin AWK

Dear Guyz:) I have 2 different input files like this. I would like to pick the values or letters from the inputfile2 based on inputfile1 keys (A,F,N,X,Z). I have done similar task by using awk but in that case the inputfiles are similar like in inputfile2 (all keys in 1st column and values in... (16 Replies)
Discussion started by: repinementer
16 Replies

8. Shell Programming and Scripting

Relace text based on position

Hi, I have a file with data like below a}hasksd09090}kdkdkd aksdkdkdk787}08ksapodd asl}alks13233}dsjskdkd I need to replace any '}' to 0 if it appears in 10 to 15 postions.If } appears in any other postion I need to leave it. So for the above data , output should be a}hasksd090900kdkdkd... (1 Reply)
Discussion started by: dncs
1 Replies

9. Shell Programming and Scripting

get lines with multiple values at a position

Hi, I have a file like below: ABC,1001,DEFG,40000 AVD,2002,FGRG,3000 DBF,2002,HDGD,3454 GDF,4564,GRTR,5656 GDF,4659,GGTD,10002 .... ..... I have to get all the lines which contains 2002 and 4659 at the second position. Please help. The output file will be like: ... (9 Replies)
Discussion started by: deepakgang
9 Replies

10. Shell Programming and Scripting

Spliting the line based on position.

i want to split a big line based on the position. example : I have a single line which has 2300 characters. i want to split from 1 character to 300th characters as first line and 301th to 600 as second line and 601th to 900 as third line ...till the end of the string. Can anyone help... (1 Reply)
Discussion started by: senthil_is
1 Replies

Featured Tech Videos