Sponsored Content
Full Discussion: Change directory error
Top Forums Shell Programming and Scripting Change directory error Post 302924616 by Don Cragun on Tuesday 11th of November 2014 05:45:23 AM
Old 11-11-2014
Quote:
Originally Posted by cmccabe
Thank you all Smilie... I am a scientist learning awk so I don't mean to disregard any advice, I truly appreciate it.

Junior-Helper your code works great and is much easier to read and follow the flow. How do you do things like:

Code:
 match -> additional -> additional -> convert (repeated manual input of ids)

Code:
menu -> match -> convert? -> NO -> additional? -> NO -> menu
        ^               |          |         |
        |               +--> YES --+         +--> YES +
        |                                             |
        +---------------------------------------------+

and use a collapse function for all things related to convert in line 36 or additional in line 49. I use notepad++ on a windows machine. Thank you all again Smilie.
I'm a little bit confused. You say you're learning awk, but there is no awk code in this thread.

Drawing ASCII art may be easier in vi than in notepad++, but you shouldn't have any problem even in notepad++ as long as you choose a fixed width font (e.g., courier).

Note that there is one problem with the code that junior-helper provided: None of the functions ever return! Instead of returning, each of the functions recursively calls one of the other functions. Every time the script processes another patient, panel, or bad response, it increases the size of the shell's stack. As the stack grows, the shell will slow down until (if enough patients and panels are entered before the user exits the script), it will run into a stack memory allocation limit and die. The following alternative script with a flowchart more like:
Code:
			    /\		       /\
			   /  \<-----NO-------/  \<---------------+
			  /    \	     /    \	     +----|----+
 +-------+   +------+	 /  new \	    / new  \	     | process |
 | start |-->| menu |-->< patient>--YES--->< panel  >--YES-->} patient ]
 +-------+   +------+	 \   ?  /	    \  ?   /	     | & panel |
			  \    /    +------+ \    /	     +---------+
       +-------------------\  /-NO->| exit |  \  /-------------------+
       |		    \/      +------+   \/		     |
       |		    ^			^		     |
       |		    |			|		     |
       +--Invalid response--+		    	+--Invalid response--+

uses a couple of loops (instead of recursion) to avoid the continually growing stack issue:
Code:
#!/bin/bash

# Main menu...
menu() {
	# Loop reading patient IDs; exit on zero or EOF.
	while [ 1 ]
	do	clear
		printf '\n\nEEnter patient ID (0 to exit): '
		if ! read id || [ "$id" = 0 ]
		then	break
		fi
		if [ "$id" = "" ] || [ "$id" != "${id#*[^0-9]}" ]
		then	printf '\nPatiend ID must be numeric; try again.\n'
			sleep 5
			continue
		fi
		process_panels
	done
        printf "\nBye!\n"
	exit
}

# Proess panels for the current patient ID
process_panels() {
	# Loop reading panels to process for current patient ID ($id)...
	while [ 1 ]
	do	printf "\nEnter panel number for patient ID $id (0 when done): "
		if ! read panel || [ "$panel" = 0 ]
		then	return
		fi
		if [ "$panel" = "" ] || [ "$panel" != "${panel#*[^0-9]}" ]
		then	printf '\nPanel number must be numeric; try again\n'
			continue
		fi

		# Process this panel for this patient...
		printf "DEBUG INFO: Processing patient ID $id, panel $panel\n"
		$(perl -aF/\\t/ -lne 'BEGIN{%m=map{chomp
			s/\cM|\cJ//g
			$p=join("\t",(split/\t/)[4,5])
			($p,$_)} <>
			$m{"#CHROM\tINFO"}=$m{"Chr\tSegment Position"}}
			/SEGPOS=(\d+)/ || /\t(INFO)\t/ or next
			$p=$F[0]."\t".$1
			exists $m{$p} and print join("\t",$_,$m{$p})' \
			${id}_${panel}_${OMR}.txt \
			< ${id}_${panel}_${OMR}_Filtered.vcf \
			> ${id}_matched.vcf)
		printf "\nConvert patient ID $id, panel $panel file (Y/N)?: "
		read convert_choice
		case "$convert_choice" in
		([yY])	printf "Converting patient ID $id, panel $panel file.\n"
			$ perl convert2annovar.pl -includeinfo \
				-format vcf4old ${id}_matched.vcf \
				> ${id}_matched.avinput)
		esac
	done
}

# Initialize location and variables...
cd 'C:\Users\cmccabe\Desktop\annovar'
OMR=Output_Mutation_Report

# Loop through user supplied patient IDs and loop though panels for each
# patient...
menu

This User Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

change directory

Hi all, I'm trying to wirte a small shell script in Linux. My script has the flow like, cmd1 cmd2 cd testdata cmd3 After exiting the program, the CWD remains the same as where I execute the program. I need it to be changed to the latest updated directory in the program. How can I do... (1 Reply)
Discussion started by: vadivel
1 Replies

2. Shell Programming and Scripting

change directory

hi, Iam in directory A. I run a script from there. inside the script i have a command cd B. When i come out of the script directory is A only. Even when i come out scrip i want the directory to be B How to achieve (2 Replies)
Discussion started by: mkan
2 Replies

3. Shell Programming and Scripting

Change Directory via a script?

I would like to have a script that would change my current working directory. However, any time I execute a 'cd' command in a script, it holds only for the life of that script -- the working directory on exit is the same as when the script was initiated. Is it possible to have the script return... (3 Replies)
Discussion started by: George Borrmann
3 Replies

4. UNIX for Dummies Questions & Answers

Change Directory

I have a directory that is existing under my root dir of the FTP server. The DIR name is 'Software Patch'. I want to move in to that DIR to download some patches. But, when I issued a command 'cd SOftware Patch', the system said that it cannot find the dir 'Software'. I tried all possible ways like... (2 Replies)
Discussion started by: vskr72
2 Replies

5. Shell Programming and Scripting

Change all filenames in a directory

I have a directory of files and each file has a random 5 digit string at the beginning that needs to be removed. Plus, there are some files that will be identically named after the 5 digit string is removed and I want those eliminated or moved. any ideas? (17 Replies)
Discussion started by: crumb
17 Replies

6. Shell Programming and Scripting

change directory if available

I have a simple shell script that prompts the user to enter a directory to navigate to. What i want it to do and i don't know how to do this is if the directory is invalid automatically navigate to the home directory. echo "enter a directory to navigate to:" read directory cd $directory... (6 Replies)
Discussion started by: icelated
6 Replies

7. UNIX for Dummies Questions & Answers

How to change database directory to another directory?

Hi, I Installed mysql on my CentOS 6.2 Server. But when I tried to change the location of /var/lib/mysql to another directory. I can't start the mysql. Below is what I've done yum install mysql mysql-server mysql-devel mkdir /path/to/new/ cp -R /var/lib/mysql /path/to/new chown -R... (1 Reply)
Discussion started by: ganitolngyundre
1 Replies

8. Shell Programming and Scripting

Change to directory and search some file in that directory in single command

I am trying to do the following task : export ENV=aaa export ENV_PATH=$(cd /apps | ls | grep $ENV) However, it's not working. What's the way to change to directory and search some file in that directory in single command Please help. (2 Replies)
Discussion started by: saurau
2 Replies

9. Shell Programming and Scripting

Change Directory

Hi All, There is a code like below in my script ############################################### ###Create Directories and Sub-Directories ############################################### dpdir=DP_FROM_${from}_TO_${to} mkdir $dpdir cd $dpdir mkdir AWQM WFCONTROLLER PROVCO PRISM ... (1 Reply)
Discussion started by: pvmanikandan
1 Replies

10. Shell Programming and Scripting

Change directory shell

#!/bin/bash echo -n "Enter number of sanger patients : "; read id perl -ne 'chomp; system ("perl table_annovar.pl $_ humandb/ -buildver hg19 -protocol refGene,popfreq_all,common,clinvar,clinvarsubmit,clinvarreference -operation g,f,f,f,f,f -otherinfo")' < file.txt I have the above script... (7 Replies)
Discussion started by: cmccabe
7 Replies
All times are GMT -4. The time now is 04:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy