Connecting 3 files

Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Connecting 3 files
# 8  
Old 11-26-2013
Both file1.txt and file2.txt have line separators that are <carriage-return><newline> character pairs instead of just <newline> and neither of these files end with a <newline> character. So, by definition, they are not text files. Since the last lines in file1.txt and file2.txt were incomplete lines, id "At3g02190" might not have been processed correctly (if it had appeared in file3.txt) and code "S" (if it had been the code for any id that was being processed) might not have been handled as desired.

The following script adds trailing <newlines> characters to each input file (in the echo loop at the start of the script) and removes any <carriage-return> characters found in the input (using gsub()) and any empty lines (which were already present in file2.txt and may now have been created by the echo loop) while processing the input files. The logic is similar to Yoda's script, but gets rid of some processing by using a more complex ERE for the field separator:
# Add trailing newlines to the input files.
for i in 1 2 3
do      echo >> file$i.txt
awk -F '[[]|] |th:  | *$' '
BEGIN { OFS = "|" }
{       # Get rid of any carriage returns characters in the input files.
        gsub(/\r/, "")
/^$/ {  next }  # Skip empty lines.
FNR == 1 { f++ }
f == 1 {# Gather codes for id from 1st file:
        if($0 ~ /^[[]/) {# If line start with "[", it contains the code
                c = substr($2, 1, 1)    # Discard trailing "R", if present.
        code[$2] = c    # Otherwise, we have an id; save the code for this id.
f == 2 {# Gather description for each code from 2nd file:
        if(NF == 1)     # Save code group heading.
                h = $0
        else            # Save code description.
                desc[$2] = $3 OFS h
{       # We must be looking at the 3rd file.  Print description for given id.
        print $1, code[$1], desc[code[$1]]
}' file[123].txt

I use the Korn shell, but any shell that accepts basic Bourne shell syntax will work with this script. If you want to run this on a Solaris/SunOS system, change awk to /usr/xpg4bin/awk, /usr/xpg6/bin/awk, or nawk.

The output produced with the sample inputs is:
At1g53930|O|Posttranslational modification, protein turnover, chaperones|CELLULAR PROCESSES AND SIGNALING
At2g36170|J|Translation, ribosomal structure and biogenesis|INFORMATION STORAGE AND PROCESSING

which seems to match what was requested except that there is no space character immediately after the last "|" in each line.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Shell script for connecting multiple servers and then copying 30 days old files

Shell script for connecting multiple servers and then copying 30 days old files from those server . HI , I have 6 multiple servers pla1,pla2,pla3,pla4,pla5,pla6 1. These six servers have common shared mount point /var/share 2. Running script from /var/share to connect these servers.I... (1 Reply)
Discussion started by: rcroyal88
1 Replies

2. Shell Programming and Scripting

Error when connecting to remote server to find files with timestamp today's day

I am connecting to remote server and try to check if files with timestamp as Today's day are on the directory. Below is my code TARFILE=${NAME}.tar TARGZFILE=${NAME}.tar.gz ssh ${DESTSERVNAME} 'cd /export/home/iciprod/download/let/monthly; Today=`date +%Y%m%d`; if ;then echo "We... (1 Reply)
Discussion started by: digioleg54
1 Replies

3. Shell Programming and Scripting

connecting through sqlplus

I am trying to connect to one of the oracle sever using uni through sqlplus command: sqlplus -s BOXI_ALPH_AUDITOR,Q078_audit$@Q047 But its not getting connected. I tried using some different server using same syntax its working. What differene i found is the password is having no special... (2 Replies)
Discussion started by: gander_ss
2 Replies

4. UNIX for Dummies Questions & Answers

connecting lines of 2 different files

How would i connect the lines of 2 different files? Also how would i reissue the command to use an equal signsas the seperators between the fields? (1 Reply)
Discussion started by: trob
1 Replies

5. UNIX for Dummies Questions & Answers

Connecting Two Unix Computers To Share Files

I was wondering if I could get some help with two of my Unix computers. Bare with me as I am new to this software and, hardly know anything on these computers, except based on what I have already worked with them. Here is my issue. I have two unix computers setup together, not connected... (6 Replies)
Discussion started by: OrangeNblack
6 Replies

6. UNIX for Dummies Questions & Answers

Connecting to website

Okay, here's the situation: I have a UNIX box hosting a website. The website is basically there to hold a .swf file; when you go to the URL, the .swf file loads, and it pulls data from a database on another computer into a cache. The cache holds things for 24 hours. This all works fine, so it's... (7 Replies)
Discussion started by: BSchow
7 Replies

7. AIX

Connecting to DB

Is it possible to connect to two databases in a single query with different username and passwords? provide an example pls (1 Reply)
Discussion started by: rollthecoin
1 Replies

8. Solaris

Connecting to SAN

I am about to attempt to connect my sun 280R boxes to a EMC SAN. I have Qlogic cards that came from Sun. I am going to load traffic manager, navisphere client. what else do i need, sun foundation suite ro somehting? This is the first time ive ever connected to a SAN. any help would be... (3 Replies)
Discussion started by: BG_JrAdmin
3 Replies

9. UNIX for Dummies Questions & Answers

connecting the ip address

Hi, I have three ip address say x.x.x.x , y.y.y.y and z.z.z.z I am connecting to x.x.x.x first and from there i am telnet y.y.y.y and getting into y and from there i am telnet to z i want to know, can we write a script, which can automatically connect from x to y and from y to z.. is... (1 Reply)
Discussion started by: vasikaran
1 Replies

10. Shell Programming and Scripting

connecting ....sql

if; sqlplus /nolog <<EOF conn / as sysdba spool /tmp/start.out @/oracle/home/start.sql spool off exit EOF fi For this code i am getting error: syntax error at line 7 : `<<' unmatched (8 Replies)
Discussion started by: dreams5617
8 Replies
Login or Register to Ask a Question