Visit The New, Modern Unix Linux Community

Shell - Read a text file with two words and extract data

Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Shell - Read a text file with two words and extract data
# 1  
Question Shell - Read a text file with two words and extract data

hi I made this simple script to extract data and pretty much is a list and would like to extract data of two words separated by commas and I would like to make a new text file that would list these extracted data into a list and each in a new line.

Example that worked for me with text file having 3 fields only:
IFS=", "
while read f1 f2 f3
	echo "$f1"
	echo "$f2"
	echo "$f3"
done < test2.txt > output.txt

and output.txt shows this


cat test2.txt shows this:
cheek, gingivae, hard,
palate, inferior, lip,
soft, palate, superior
lip, tongue, uvula

BUT NOW I have a list with more fields and have two words that I need:

new test2.txt shows this:
right, kidney, right ureter,
urethra, urinary, bladder,
left, adrenal gland, abdominal aorta, inferior vena cava, right renal vein, right renal artery, rectum, uterus

how can I list these 2 word terms into a list with each in its own individual line


Last edited by Scrutinizer; 10-14-2016 at 05:03 AM.. Reason: CODE tags
# 2  
Hi, try using arrays:
while IFS=', ' read -a F
  printf "%s\n" "${F[@]}"
done <  newtest2.txt > output.txt

But there is another issue:
There are fields that contain spaces, so the IFS value will not work properly.

So try this instead:
while IFS=, read -a F
  printf "%s\n" "${F[@]# }"
done < newtest2.txt > output.txt

Here the IFS is set to a single comma and a spurious leading space gets cut off through parameter expansion (# )

Last edited by Scrutinizer; 10-14-2016 at 05:09 AM..
# 3  
May I ask what read -a do and F means too?

Also I why did you use printf instead of echo now? I don't know much about printf may I ask if its like grep or awk?

Then, what does %s mean I know \n is newline

Then, what does ${F[@]# } mean?

while IFS=, read -a F
  printf "%s\n" "${F[@]# }"
done < newtest2.txt > output.txt

Thanks much for prompt reply!

Last edited by rbatte1; 10-14-2016 at 08:04 AM.. Reason: Changed CODE tags to ICODE and corrected spelling
# 4  
You're welcome,

-a means read into an array (when using bash). F is the name of the array

printf is the preferred and standardized alternative to echo. The first field to printf is the "format string" . "%s" means "string" and "\n" means new line". See: printf or the bash man page.

To get all the element of the array one normally uses: "${F[@]}"
"${F[@]# }" does the same, but in addition it uses parameter expansion and # means cut off a leading space if it exists.

Since F is an array it will work on every element of the array (more about this in the bash man page).

With the while read loop, for every line of the input file, the array F gets filled anew.

Last edited by Scrutinizer; 10-14-2016 at 05:34 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 5  
tr ',' '\n' <file

do the same (except for the leading spaces)?
# 6  
Hi RudiC, yes, except for leading spaces and extra new lines, and:
awk '{$1=$1}1' RS=, newtest2.txt > output.txt

would be a full solution.

But I assumed the OP wanted a shell solution, since that is what the OP was using and I assumed he was going to do some further processing within the loop.

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

Test Your Knowledge in Computers #417
Difficulty: Medium
The terms Vanilla JavaScript and Vanilla JS refer to JavaScript which uses very small cookies during web sessions.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Read csv file, convert the data and make one text file in UNIX shell scripting

I have input data looks like this which is a part of a csv file 7,1265,76548,"0102:04" 8,1266,76545,"0112:04" I need to make the output data should look like this and the output data will be part of text file: 7|1265000 |7654899 |A| 8|12660000 |76545999 |B| The logic behind the... (6 Replies)
Discussion started by: RJG
6 Replies

2. UNIX for Dummies Questions & Answers

Shell script to read lines in a text file and filter user data Shell Programming and Scripting

sxsaaas (3 Replies)
Discussion started by: VikrantD
3 Replies

3. Shell Programming and Scripting

I need to extract uique words from text file

Hello programmers, I need to create a list of unique words from a text file using PERL...may i have the code for that please? Thank you (1 Reply)
Discussion started by: alsohari
1 Replies

4. Shell Programming and Scripting

regular expression with shell script to extract data out of a text file

hi i am trying to extract some specific data out of a text file using regular expressions with shell script that is using a multiline grep .. and the tool i am using is pcregrep so that i can get compatibility with perl's regular expressions for a sample data like this, i am trying to grab... (6 Replies)
Discussion started by: vemkiran
6 Replies

5. Shell Programming and Scripting

Script to read file and extract data by matching pattern

Hello, I have a file ( say file1) which has lines like below. xxxx:xxxx,yyyy,1234,efgh zzzz:zzzz,kkkk,pppp,1234,xxxx,uuuu,oooo dddd:dddd here the word before ":" ( ie: xxxx) is the file name and the string after : are also file names, but each file name separated by "," In case of... (20 Replies)
Discussion started by: pradeepmacha
20 Replies

6. Shell Programming and Scripting

How to read the data from the text file in shell script?

I am having one text file and i need to read that data from my shell script. I will expain you the scenario: Script look like: For name type 1: For age type 2: For Salary type3: echo "Enter the input:" read the data if input is 1 then go to the Text file and print the... (2 Replies)
Discussion started by: dineshmurs
2 Replies

7. Shell Programming and Scripting

Shell script to read lines in a text file and filter user data

hi all, I have this file with some user data. example: $cat myfile.txt FName|LName|Gender|Company|Branch|Bday|Salary|Age aaaa|bbbb|male|cccc|dddd|19900814|15000|20| eeee|asdg|male|gggg|ksgu|19911216||| aara|bdbm|male|kkkk|acke|19931018||23| asad|kfjg|male|kkkc|gkgg|19921213|14000|24|... (4 Replies)
Discussion started by: srimal
4 Replies

8. Shell Programming and Scripting

shell script to read data from text file and to load it into a table in TOAD

Hi....can you guys help me out in this script?? Below is a portion text file and it contains these: GEF001 000093625 MKL002510 000001 000000 000000 000000 000000 000000 000001 GEF001 000093625 MKL003604 000001 000000 000000 000000 000000 000000 000001 GEF001 000093625 MKL005675 000001... (1 Reply)
Discussion started by: pallavishetty
1 Replies

9. Shell Programming and Scripting

To read and separate number and words in file and store to two new file using shell

hi, I am a begginer in unix and i want to know how to open a file and read it and separate the numbers & words and storing it in separate files, Using shell scripting. Please help me out for this. Regards S.Kamakshi (2 Replies)
Discussion started by: kamakshi s
2 Replies

10. Shell Programming and Scripting

how to read all the unique words in a text file

How can i read all the unique words in a file, i used - cat comment_file.txt | /usr/xpg6/bin/tr -sc 'A-Za-z' '/012' and cat comment_file.txt | /usr/xpg6/bin/tr -sdc 'A-Za-z' '/012' but they didnt worked..... (5 Replies)
Discussion started by: aditya.ece1985
5 Replies

Featured Tech Videos