Parse file name, add to loop?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parse file name, add to loop?
# 1  
Old 03-25-2019
Parse file name, add to loop?

I have a list of files that I need to loop through, parse, and run a command against. Here's my selected approach.

Code:
for i in FIELD1.FIELD2.FIELD3.FIELD4.index
do
  j=${i%.index}
  loadutility -flag1 FIELD1 -flag2 FIELD2 -flag3 FIELD3  $j(without.index extension)
done < filelist.del

I figure a loop like this is my best approach but I might have to throw some awk into the equation, which unfortunately I haven't touched really!

Any suggestions on a good approach is appreciated!
# 2  
Old 03-25-2019
Your code snippet certainly will not do what you expect it to do. A for loop doesn't read from stdin, so a redirection from filelist.del won't do anything (unless the loadutility will read from there). The loop itself will iterate exactly once with the $i variable assuming the value FIELD1.FIELD2.FIELD3.FIELD4.index, and the $j assuming FIELD1.FIELD2.FIELD3.FIELD4. The loadutility command will execute with the "FIELDn" string constants exactly as written; expansion will be performed on the $j variable only.


"I might have to throw some awk into the equation" - on what? Where? What is your target? What is your input? What is your OS, and shell? And, do you want to "parse a file name", or a file ('s contents)?
# 3  
Old 03-25-2019
I am using bash shell.

Here's a high level summary of what I have if it will help out better explain what I am trying to do.

I need to run a utility against a series of files, it needs to hit each file in a certain directory.

Example of my files in my directory-
$BASEDIR/data/files
Code:
file1.field1.field2.field3.index
file2.field1.field2.field3.index
file3.field1.field2.field3.index

The fields can all vary depending on the file.

The desired command syntax to execute is below:

Code:
loadcommand -a field2 -g field3 file1.field1.field2.field3.index
loadcommand -a field2 -g field3 file2.field1.field2.field3.index
loadcommand -a field2 -g field3 file3field1.field2.field3.index

Stumped unfortunately.

Last edited by RudiC; 03-25-2019 at 12:49 PM..
# 4  
Old 03-25-2019
Hi jeffs42885,
Expanding slightly on what RudiC has already said...

I do not have any idea of what you are trying to do. The loop you have shown us above has one item to be processed, and, therefore, invokes loadutility once. There is no file parsing nor filename parsing indicated in your loop and you haven't specified any reason why you might want to throw awk into your loop.

Assuming that (without.index extension) in the code in post #1Make was intended to be a comment (which it is not any any shell language I'm aware of), your loop can be replaced by the single command:
Code:
loadutility -flag1 FIELD1 -flag2 FIELD2 -flag3 FIELD3  FIELD1.FIELD2.FIELD3.FIELD4 < filelist.del

I assume that is this not what you're trying to do, but I can't figure out from your description what it is that you do want to do if it is not to execute the above single command.

I have also never heard of the loadutility utility, but the options you are passing to it seem strange unless you intend for flag1 through flag3 to be variable single-letter options each of which takes an option-argument (but, if that was the case you should have -$flag1 through -$flag3.

Please tell us what operating system you're using, what shell you're using, and provide us with a much clearer statement of what you are trying to do.

And then we see your post #3 which doesn't really help at all? Why is the .index that you said had to be deleted not deleted from any of the invocations of loadutility?

What happened to -flag1 FIELD1 in your invocations of loadutility?

What is special about the filename starting with file3 that the first <period> in its name has to be removed when it is passed to loadutility as an operand?

You aren't the only one that is stumped!

Last edited by Don Cragun; 03-25-2019 at 11:29 AM.. Reason: Make reference clear: s/in the above code/in the code in post #1/
# 5  
Old 03-25-2019
Quote:
Originally Posted by Don Cragun
Hi jeffs42885,
Expanding slightly on what RudiC has already said...

I do not have any idea of what you are trying to do. The loop you have shown us above has one item to be processed, and, therefore, invokes loadutility once. There is no file parsing nor filename parsing indicated in your loop and you haven't specified any reason why you might want to throw awk into your loop.

Assuming that (without.index extension) in the code in post #1Make was intended to be a comment (which it is not any any shell language I'm aware of), your loop can be replaced by the single command:
Code:
loadutility -flag1 FIELD1 -flag2 FIELD2 -flag3 FIELD3  FIELD1.FIELD2.FIELD3.FIELD4 < filelist.del

I assume that is this not what you're trying to do, but I can't figure out from your description what it is that you do want to do if it is not to execute the above single command.

I have also never heard of the loadutility utility, but the options you are passing to it seem strange unless you intend for flag1 through flag3 to be variable single-letter options each of which takes an option-argument (but, if that was the case you should have -$flag1 through -$flag3.

Please tell us what operating system you're using, what shell you're using, and provide us with a much clearer statement of what you are trying to do.

And then we see your post #3 which doesn't really help at all? Why is the .index that you said had to be deleted not deleted from any of the invocations of loadutility?

What happened to -flag1 FIELD1 in your invocations of loadutility?

What is special about the filename starting with file3 that the first <period> in its name has to be removed when it is passed to loadutility as an operand?

You aren't the only one that is stumped!
Apologies. Alot of this is custom in house stuff and I am just trying to mask certain things. I am also trying to provide my approach in a scripting sense with examples, as to not just "ASK FOR THE SOLUTION!!"

Anyways, like I said..bash (RHEL)

It might be easier if I just list the steps that I am trying to do..

Here are the high level steps I am trying to accomplish..

1) Gather listing of all files in $basedir/directory with extension .index (They will all be named like this, uniquely - FIELD1.FIELD2.FIELD3.FIELD4.index)
2) Run a custom utility against each file with the .index extension, in the below format.

Code:
loadutility -flag1 FIELD3 -flag2 FIELD4 FIELD1.FIELD2.FIELD3.FIELD4

Hope this help, didnt mean to confuse!
# 6  
Old 03-25-2019
something along these lines?
Remove echo when satisfied with results.
Code:
#!/bin/bash
path2dir='/whatEverPath2dir'
for file in ${path2dir}/*.index
do
   IFS=. read f1 f2 f3 rest <<< $file
   echo loadcommand -a "${f2}" -g "${f3}" "${f1}.${f2}.${f3}.${rest}"
done


Last edited by vgersh99; 03-25-2019 at 12:57 PM..
# 7  
Old 03-25-2019
Your approach to learn the ropes yourself in lieu of requesting a turnkey solution is the right one, congrats.

But, for your own - and our - sake: please please please - BE consistent!

You confuse people by having a loadutility here and a loadcommand there, then three flags, two flags, three flags, two flags, then FIELD1, FIELD2, FIELD3 here, field2 & field3 there, then FIELD2 and FIELD4, and a filen in front, or no filen, .index yes, .index no. Do you really expect someone to come up with a decent solution based on that? I'm pretty sure below proposal will NOT fit your actual needs; be prepared to experiment with it and adapt until it fits.


Howsoever, as vgersh99 beat me with the for loop solution, how about this one:
Code:
ls *.index | while IFS="." read FN F1 F2 F3 IX; do echo loadutility -a $F2 -g $F3 $F1.$F2.$F3; done
loadutility -a field2 -g field3 field1.field2.field3
loadutility -a field2 -g field3 field1.field2.field3
loadutility -a field2 -g field3 field1.field2.field3

The echo is there for safety / debug purposes; remove if happy with what you see.

Last edited by RudiC; 03-25-2019 at 01:15 PM..
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Reset while loop to loop same file multiple times

Hi, I want to read file multiple times. Right now i am using while loop but that is not working. ex. While read line do while read line2 do echo stmt1 #processing some data based on data., done < file2.txt done < file1.txt # This will have 10... (4 Replies)
Discussion started by: tmalik79
4 Replies

2. Shell Programming and Scripting

Script to loop line in a file and add info or do echo

I have a record.txt it will update weekly, and it could be 2 lines or more ... it just echo each line to the script san jose,23.34% tampa,2.15% dallas,30.20% seattle,44.29% Unknown,16.72% How do i write a shell script to give me a test.pl or bash file which contain #!/home/perl... (8 Replies)
Discussion started by: sabercats
8 Replies

3. Shell Programming and Scripting

Parse a file

FILE1 2917,065A,RDF1+TDEV,2917_3RAID5,05E:0_10E:0,BL_lmwsp02,0345,xxx,3452(DR) 2917,03EA,RDF1+TDEV,2917_3RAID5,03E:0_12E:0,BL_tv00p02,0455,xxx,3ee4(DR) 2917,03EB,RDF1+TDEV,2917_3RAID5,03E:0_12E:0,BL_tv00p02,0345,xxx,2d34(DR)... (7 Replies)
Discussion started by: greycells
7 Replies

4. Shell Programming and Scripting

Parse configuration file & add line in particular section

Greetings, I recently built a replicated DRBD, Heartbeat, & iSCSI Target Initiator storage server on Ubuntu 10.04 to offer shared storage to server Vmware ESX and Microsoft Clusters. Everything works flawlessly, however I wanted to make a script to create, remove, grow volumes to offer ESX... (6 Replies)
Discussion started by: Aeudian
6 Replies

5. Shell Programming and Scripting

big xml file with nested loop parse

I have an xml file with the structure: <tag1> <value1>xyx</value1> <value2>123</value2> </tag1> <tag1> <value1>568</value1> <value2>zzzzz</value2> </tag1> where I want to parse each data pair in the this single file, so something like: find first tag1 data pair... (1 Reply)
Discussion started by: unclecameron
1 Replies

6. Shell Programming and Scripting

Parse file from remote server to calculate count of string existence in that file

Hi I need to parse the file of same name which exist on different servers and calculate the count of string existed in both files. Say a file abc.log exist on 2 servers. I want to search for string "test" on both files and calculate the total count of search string's existence. For... (6 Replies)
Discussion started by: poweroflinux
6 Replies

7. Shell Programming and Scripting

while loop to add text to the end of a file

Hi all, I've got 2 files. File 1 has a list say a b c d e f File 2 got start= What I want is to create File 3 which look like this start=a,b,c,d,e,f So is it possible to loop throught File1 to echo it into File3 in one line? (3 Replies)
Discussion started by: stinkefisch
3 Replies

8. UNIX for Advanced & Expert Users

How to parse through a file and based on condition form another output file

I have one file say CM.txt which contains values like below.Its just a flat file 1000,A,X 1001,B,Y 1002,B,Z ... .. total around 4 million lines of entries will be in that file. Now i need to write another file CM1.txt which should have 1000,1 1001,2 1002,3 .... ... .. Here i... (6 Replies)
Discussion started by: sivasu.india
6 Replies

9. Shell Programming and Scripting

Need help to parse the file

# Start "ABC" SFFd 0 4 Time SFFT 4 8 {Sec} User SFFTimeVal 12 8 {Sec} # Start "CP" SFFT ... (3 Replies)
Discussion started by: navsharan
3 Replies

10. Shell Programming and Scripting

Parse file

Hi Friends, I have a file in the format shown (Name followed by address:) I need only the address part please see the output. I have tried using nawk but I am not getting the desired output. SAM ADDRS 64874 FRANKLYN DR IRVINE TX - 74394; 538 FRED ASSOCIATES PETER ADDRS 84734... (5 Replies)
Discussion started by: sbasetty
5 Replies
Login or Register to Ask a Question