naming files that csplit creates

Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers naming files that csplit creates
# 1  
Old 08-10-2009
naming files that csplit creates

This is my first time on this forum..
I searched the previous answers, but didn't find the answer I was looking for at first glance.

csplit works beautifully for me, except for one thing. My file looks like this:

ad|name1|asdf...(several pages)..asdf ...
ad|name2|asdf...(several pages)..asdf ...
ad|name3|asdf...(several pages)..asdf ...
...x500 ...

where 'name x' is some regular string

With the command:
csplit file.txt '/ad/' {500}

I was able to split the file into 500 files, each starting with "ad|name1|..."

My only problem is that I want the NAMES of these files to be whatever's in the correspoinding vertical bars. In the above example, for file1, I want the name to be name1.

I have no clue how I would go about naming the children files according to what's in between the vertical bars [ I already know that the vertical bars will NOT show up anywhere else in the file ]. Is there a way using csplit ??
If csplit does not have this capability, I guess I'll have to just rename the 500 files. Is there a way to rename files based on what string is found between specified characters ??

I hope I don't have to do this manually.

Thank you everyone in advance! Any help is MUCH appreciated Smilie
# 2  
Old 08-10-2009
csplit's a new on on me so if someone knows a commandline arg for that that does it - sing out! Smilie

To do the rename afterwards though, you can do the following:
for file in ad\|*; do mv "$file" `echo "$file" | cut -d '|' -f 2`.txt; done

This is assuming the files really have | symbols in the names (if not, post a few of the filenames generated).
I've tested this but not exhaustively, so try it someplace safe of cource Smilie
# 3  
Old 08-11-2009
Thank you very much Smiling Dragon for your response.

How do I apply that command ??

I just apply it like any command in UNIX ?? (like for example 'mkdir name' ) ??

I tried that exact command and got:
"mv: cannot stat `ad|*': No such file or directory Smilie
# 4  
Old 08-11-2009
Yes, that's a regular one-liner command.
Have you confirmed that the filenames are as per my stated assumption?

That 'cannot stat' error is telling you that mv can't find any files beginning with ad|
I'm guessing that means the filenames are not quite as I've assumed, if not, please supply the exact format of them and clarify what you are after Smilie

What shell are you running this in? (find out by running "ps")

Last edited by Smiling Dragon; 08-11-2009 at 10:15 PM..
# 5  
Old 08-12-2009
Oh I'm so sorry! I missed everything below your quoted portion!
* I'm still new to this forum! *

I didn't realize you had particular file names,
The filenames generated by csplit are in the format:

I don't think they have any extension, but if they do, it would be .vi

Thanks again! Smilie
# 6  
Old 08-12-2009
Oh I see, you want the filename to be changed to match the part between the | characters within the file itself?

If so:
for file in xx*; do mv "$file" `head -1 "$file" | cut -d '|' -f 2`.txt; done

Should do the trick.

I've picked a .txt extension for the new filename, but you can change it whatever you wish.

Note that this will run on anything starting with xx so be careful what else is in that directory when you run this.

Better yet, test it someplace safe first.
# 7  
Old 08-20-2009
Thank you so much Smiling Dragon!

I finally got a chance to try this.
I just realized that I made a mistake in the question I originally asked.

This code you suggested:

for file in xx*; do mv "$file" `head -1 "$file" | cut -d '|' -f 2`.txt; done
works perfectly for what I asked for, but I just noticed that my files are actually in the format:

asdf...asdf | some Junk | asdf...asdf |name1| asdf... .... and no more vertical bars

I was actually supposed to name the files after what is between the SECOND set of vertical bars, rather than the first.

Is there a way to do that ??

And by any chance, now that I've renamed 500 files incorrectly, is there an undo button in unix Smilie ??
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Convert creates multiple files

I want to crop an image and am using convert convert mountain.png -crop 3000x4500 +repage -format png mountain--cr.png The problem is that convert is creating 4 files mountain--cr-0.png mountain--cr-1.png mountain--cr-2.png mountain--cr-3.png The first is what I need, the other... (10 Replies)
Discussion started by: Kangol
10 Replies

2. Shell Programming and Scripting

Concatenation of files with same naming patterns dynamically

Since my last threads were closed on account of spamming, keeping just this one opened! Hi, I have the following reports that get generated every 1 hour and this is my requirement: 1. 5 reports get generated every hour with the names "Report.Dddmmyy.Thhmiss.CTLR"... (5 Replies)
Discussion started by: Jesshelle David
5 Replies

3. UNIX for Advanced & Expert Users

Allow user without dir write permission to execute a script that creates files

In our project we have several unix scripts that trigger different processes. These scripts write logs to a particular folder 'sesslogs', create output data files in a separate directory called 'datafiles' etc. Usually L1 support team re-run these scripts . We donot want L1 support team to have... (14 Replies)
Discussion started by: waavman
14 Replies

4. UNIX Desktop Questions & Answers

Combining files with specific patterns of naming in a directory

Greetings Unix exports, I am facing some problems in combining files with different name patterns with a directory and I would appreciate if you can help me I have more than 1000 files but they follow a specific pattern of naming. e.g. 64Xtest01.txt They are divided into two sets of test and... (9 Replies)
Discussion started by: A-V
9 Replies

5. UNIX for Dummies Questions & Answers

naming files in awk

I have a whole directory and I need each lines of each file to be separated to a new file but I am facing problem naming them :( some of the files even might be empty the output files should be names original file name + the number of the line or any incremental number FILES="data/*" for X in... (12 Replies)
Discussion started by: A-V
12 Replies

6. Shell Programming and Scripting

Concatenate files to one file with naming convention

Hi , i have below files in wrk folder. file names are 1102090001.CLT 1102090003.CLT 1102100019.CLT 1102100020.CLT the above files are concatenate to one file but that concatenate file name must be same naming convention. (date +%y%m%d)and 0001 count. example : concatenate file... (9 Replies)
Discussion started by: krbala1985
9 Replies

7. Shell Programming and Scripting

Complex overlap and naming of 2 input files - Awk

for every specific $1,$2 check the values ($2,$3) of their E ot I of input1 and overlap with input2. Specify names based on output. ####### if middle value is missing name them "SE" if first value is missing name them "AFE" if last value is missing name them "ALE" if 2 middle values are... (1 Reply)
Discussion started by: ruby_sgp
1 Replies

8. UNIX for Dummies Questions & Answers

SCO 5.0.7 Cron creates files with 600, need 644

Hi, I've searched and read, and searched and read some more; but I'm still not connecting the dots or understanding what I need to change. I have a script that creates a file. If I run it as root, the file gets created with 644 permissions like I want. That seems to make sense (at least I... (2 Replies)
Discussion started by: 65bit
2 Replies

9. Windows & DOS: Issues & Discussions

gVim creates and leaves strange tilde ~ files in Windows

Hey folks, I have used gVim in Windows for many years but I have never found an answer to a very simple question I am going to ask you guys... My question is if there is a way to eliminate the creation of those ~ files that gVim creates in Windows. If you have ever used gVim in Windows you... (2 Replies)
Discussion started by: ghbarratt
2 Replies

10. UNIX for Dummies Questions & Answers

Split files using Csplit

I have an excel file with more than 65K records... Since excel does not take more than 65K records i wan to split the file and send it as two excel files... Could some help me how to use the csplit by specifiying the no of records (7 Replies)
Discussion started by: savitha
7 Replies
Login or Register to Ask a Question