If based on filename?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting If based on filename?
# 8  
Old 04-26-2007
Quote:
Originally Posted by kshelluser
have tried

awk '/^0/ && FILENAME ~ /^AA/ { print "AA"substr($0,10,6)"00"}' $filename > TEST_FILE

however there is nothing being printed out to the TEST_FILE even though the file I'm processing is named AA020507XG.txt. For some reason this is not matching the above criteria?
Your file may not contain any lines starting with zero.
# 9  
Old 04-26-2007
It does, if I do:

awk '/^0/ { print "AA"substr($0,10,6)"00"}' $filename > TEST_FILE

all works fine, however I need to process files with two different names in a slightly different manner, hence it needing to match a filename criteria.

Thanks.
# 10  
Old 04-26-2007
Can you show your full script?
# 11  
Old 04-26-2007
Code:
#if [ -z $1 ] ; then
 echo 'Assuming LIVE database '
 export db='LIVE'
else
 export db=$1
 echo "Running against $db database"
fi

ORACLE_SID=$db

#collect file from inputf folder
cd testfolder

if test -f *XG.txt
 then

 #files available to process
 #need to loop through all files matching the AA* or XX* patterns, and process one by one

	for filename in *XG.txt; do
	 #create header record

	 #if filename begins with AA, do this
	 awk '/^0/ && FILENAME ~ /^AA/ { print "AA"substr($0,10,6)"00"}' $filename > TEST_HEADER_A
	 
	 #if filename doesn't begin with AA but begins with XX, do this
	 awk '/^0/ && FILENAME ~ /^XX/ { print "XX"substr($0,10,6)"00"}' $filename > TEST_HEADER_A
	
   #awk '/^0/ {if (substr($filename,1,2)=="AA") print "AA"substr($0,10,6)"00"}' $filename > TEST_HEADER_A
   #awk '/^0/ {if (substr($filename,1,2)=="XX") print "XX"substr($0,10,6)"00"}' $filename > TEST_HEADER_A

	 awk '/^9/ {print substr($0,5,5)}' $filename > TEST_HEADER_B
	 awk '/^9/ {print substr($0,14,10)}' $filename > TEST_HEADER_C
	 awk '/^9/ {print "00000""0000000000"}' $filename > TEST_HEADER_D
	 awk '/^0/ {print substr($0,2,6)}' $filename > TEST_HEADER_E

	 #produce transaction records
	 awk '/^0/ {print ""}' $filename > TEST_TRANS

	 nawk '/^1/ {
	 if(substr($0,23,3) == "000") {printf("%.5d%s\n",NR-1,substr($0,14,9)"999""  ""XXXX"substr($0,2,6)substr($0,32,7)"+""          NEW FILE""TEST      ""          ""N")} 
	 else {printf("%.5d%s\n",NR-1,substr($0,14,12)"  ""XXXX"substr($0,2,6)substr($0,32,7)"+""          NEW FILE""TEST      ""          ""N")} 
	 }' $filename >> TEST_TRANS

	 #cat sub headers together to create TEST_HEADER
	 cat TEST_HEADER_A TEST_HEADER_B TEST_HEADER_C TEST_HEADER_D TEST_HEADER_E | tr -d "\n" > TEST_HEADER

	 #cat header and trans files together to create TEST.IN
	 cat TEST_HEADER TEST_TRANS > TEST.IN

	 #move TEST.IN to $TEST_LOG
	 mv TEST.IN $TEST_LOG/'TEST.IN_'$filename

	 #clean up temp files
  	 rm TEST_HEADER
	 rm TEST_TRANS
	 rm TEST_HEADER_A
	 rm TEST_HEADER_B
	 rm TEST_HEADER_C
	 rm TEST_HEADER_D
	 rm TEST_HEADER_E
	done
	echo 'process complete'
else
	echo 'process bypassed - '$filename' file not available in the '$PWD' directory'
fi


Last edited by kshelluser; 04-26-2007 at 11:49 AM..
# 12  
Old 04-27-2007
Add >> operator and keep the if else statement inside for loop
Code:
	for filename in *XG.txt; do
	 #create header record
	if test -f $filename
 	then
	 #if filename begins with AA, do this
	 awk '/^0/ && FILENAME ~ /^AA/ { print "AA"substr($0,10,6)"00"}' $filename > TEST_HEADER_A
	 
	 #if filename doesn't begin with AA but begins with XX, do this
	 awk '/^0/ && FILENAME ~ /^XX/ { print "XX"substr($0,10,6)"00"}' $filename >> TEST_HEADER_A
	
   #awk '/^0/ {if (substr($filename,1,2)=="AA") print "AA"substr($0,10,6)"00"}' $filename > TEST_HEADER_A
   #awk '/^0/ {if (substr($filename,1,2)=="XX") print "XX"substr($0,10,6)"00"}' $filename > TEST_HEADER_A

	 awk '/^9/ {print substr($0,5,5)}' $filename > TEST_HEADER_B
	 awk '/^9/ {print substr($0,14,10)}' $filename > TEST_HEADER_C
	 awk '/^9/ {print "00000""0000000000"}' $filename > TEST_HEADER_D
	 awk '/^0/ {print substr($0,2,6)}' $filename > TEST_HEADER_E

	 #produce transaction records
	 awk '/^0/ {print ""}' $filename > TEST_TRANS

	 nawk '/^1/ {
	 if(substr($0,23,3) == "000") {printf("%.5d%s\n",NR-1,substr($0,14,9)"999""  ""XXXX"substr($0,2,6)substr($0,32,7)"+""          NEW FILE""TEST      ""          ""N")} 
	 else {printf("%.5d%s\n",NR-1,substr($0,14,12)"  ""XXXX"substr($0,2,6)substr($0,32,7)"+""          NEW FILE""TEST      ""          ""N")} 
	 }' $filename >> TEST_TRANS

	 #cat sub headers together to create TEST_HEADER
	 cat TEST_HEADER_A TEST_HEADER_B TEST_HEADER_C TEST_HEADER_D TEST_HEADER_E | tr -d "\n" > TEST_HEADER

	 #cat header and trans files together to create TEST.IN
	 cat TEST_HEADER TEST_TRANS > TEST.IN

	 #move TEST.IN to $TEST_LOG
	 mv TEST.IN $TEST_LOG/'TEST.IN_'$filename

	 #clean up temp files
  	 rm TEST_HEADER
	 rm TEST_TRANS
	 rm TEST_HEADER_A
	 rm TEST_HEADER_B
	 rm TEST_HEADER_C
	 rm TEST_HEADER_D
	 rm TEST_HEADER_E
	else
		echo 'process bypassed - '$filename' file not available in the '$PWD' directory'
	fi
	done
	echo 'process complete'

# 13  
Old 04-27-2007
I WANT TO numerical sort the fourth field in file
can i use sort command,head command in awk script

if yes, give me sample code
# 14  
Old 04-27-2007
Thanks anbu23!
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sorting based on filename

Hello , I have to write a bash script. I will explain the logic based on a scenario. Scenario : Suppose I have few files in a Folder X : FILE_201508.list FILE_201510.list FILE_201507.list abc_201510.csv xyz_201508.csv abc_201507.csv def_201507.csv 1) Now ,... (3 Replies)
Discussion started by: smamrm
3 Replies

2. UNIX for Dummies Questions & Answers

Finding filename based on filecontent

Hi, I have been trying , to find the filename based on some pattern present inside the file My command is as follows: filename=`grep -l 'Pattern' path/*.txt ` Its strange that it works some times, but doesn't print anything some times . But my if test -f $filename is passing all the... (2 Replies)
Discussion started by: Prashanth19
2 Replies

3. UNIX for Dummies Questions & Answers

Select max value based on filename

Hi, I would just like to know how to get the file with the max filename on a directory and get rid of all the others. For example, in directory A:/ i have the ff files: APPLE2001 APPLE2002 APPLE2003 GRAPE2004 what I want to get is the max in files whose filenames start with APPLE*,... (4 Replies)
Discussion started by: madden
4 Replies

4. Shell Programming and Scripting

awk based on filename

i need to use awk to replace string in file. if suppose filename is abcd.dat i need to replace in file california with CA else if file name name is cdef.dat i need to replace in file california with CALI i need to use awk(must) any suggestion how can i do that file structure ... (3 Replies)
Discussion started by: er_zeeshan05
3 Replies

5. Shell Programming and Scripting

Send email recipient based on filename

Hi All can someone help please create a bash script. Here's a scenario: 1. I have a directory where it's a destination for scanned documents. e.g. /dest/scan 2. The filename is in the form IDNumber_Category. e.g. 123456_notes.pdf 3. The first part of the script is to rename the... (1 Reply)
Discussion started by: aemestech
1 Replies

6. Shell Programming and Scripting

Move files based on date in filename

I know this gets covered quite a bit in the forum and I think there is enough there for me to figure out how to do what I am trying to do, I just don't think I would do it very efficiently so I am going to ask the question... I have database log files with date and time stamps in the file like ... (7 Replies)
Discussion started by: slatoms
7 Replies

7. Shell Programming and Scripting

Move file based on filename

Hi All I need a script to manipulate files based on a filename: example filename: 66600_042706.pdf the script will create a directory 66000 only if this directory is not existing. If that directory is existing it will just move the file to 66000/666000_042706.pdf in addition, i want to... (4 Replies)
Discussion started by: aemestech
4 Replies

8. Shell Programming and Scripting

Print only Filename based on given String on file name

Hi, I am new to this unix world. Any ways, I would like to write a shell script that can print the file name. Ex : directory will have 5 files with different name.No matter what are contents are. Now I need to find the file which will have particular name (sub string ).Please do not... (5 Replies)
Discussion started by: akb2010
5 Replies

9. UNIX for Dummies Questions & Answers

mv files based on filename

I have a directory of about 30,000 image files. The file names are all yearmonthday.jpg however some of the files have yearmonthday-snapshot.jpg i would like to move all files that contain the phrase -snapshot to their own directory. Any assistance with the proper commands would be much... (1 Reply)
Discussion started by: jdblank
1 Replies

10. UNIX for Dummies Questions & Answers

how to move files into different folders based on filename

I need to move a bunch of files into folders that have the same name. I wanted to either do this with some filter command or some type of batch file that I could save that would already include all of the mv commands since I will have to do this process often. Whatever method you think is easier. ... (7 Replies)
Discussion started by: italia5
7 Replies
Login or Register to Ask a Question