awk : split file and rename and save in path according to content


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk : split file and rename and save in path according to content
# 1  
Old 03-07-2015
awk : split file and rename and save in path according to content

Hello,

I'm using Windows 7 ; sed, awk and gnuwin32 are installed.
I have a big text file I need to manipulate.
In short, I will have to split it in thousands of short files, then rename and save in a folder which name is based upon filename.

Here is a snippet of my big input.txt file (this pattern is repeated 70k times) :
Code:
ctime=1041379201
version=text text
name=Bob.2111
targets=text text
title=text text
description=long text ending with[[#source_]]

As of now, I know how to split it with awk :
Code:
awk "/ctime/{x="F"++i;}{print > x;}" input.txt

Yet I dont know how to drive awk in renaming files.
In every splitted file, there is a line (line number 3 of the splitted file) which says the name of the expected file. In showed snippet, it is : name=Bob.2111.
I expect to have about 70k files named like Bob.[0-9]+ (no extension).

My question number one is : is awk able to do that ? is awk able to catch a value in current file according to some pattern for renaming the splitted files ? I did not find anwser yet. Most examples order awk to use a name which doesnt come from the manipulated file.

My question number two is : is awk also able to save the splitted files in a constructed path, according to content ?
I want all splitted files containing Bob.1[0-9]+ to be saved in folder 1/ ; all Bob.2[0-9]+ to be saved in folder 2/, etc., for limiting the quantity of files per folder (using first number of numerical id).

I guess I need to catch every Bob.[0-9]+ in a variable $1.
Thus I may use this variable for (1) renaming files and (2) for moving files
If Bob.2111 is $1, I would like to save file like that {substring $1,4,20}/$1 which would give 2/Bob.2111.

As you can guess, I'm not expert Smilie
Thank you.

Last edited by sellig; 03-07-2015 at 01:18 PM.. Reason: typo
# 2  
Old 03-07-2015
I'm not sure I grasped everything that you specified...
Why rename when you can save it immediately to the desired file? This requires all the directories exist:
Code:
awk '/ctime/ {T1=$0; next} /version/ {T2=$0; next} /name/ {FN=substr ($2, 5, 1) "/" $2;  print T1 > FN; print T2 > FN} {print > FN}' FS="=" file

# 3  
Old 03-07-2015
Maybe I'm not clear, I'm sorry.

Big input file is full of text, structured like that :
Code:
ctime=1041379201
name=Bob.2112
targets=text
title=text
description=text
text=text ending with [[#source_]]
ctime=1041379201
name=Bob.2113
targets=text
title=text
description=text
text=text ending with[[#source_]]
ctime=1041379201
name=Bob.2115
targets=text
title=text
description=text
text=text ending with[[#source_]]
ctime=1041379201
name=Bob.2116
targets=text
title=text
description=text
text=text ending with [[#source_]]

I need to split this big file in short files, from [ctime to ]ctime.
Which I can do using awk.

I'm looking for a way to tell awk (or else ?) how to name these splitted files. I wish it is doable with awk during the splitting step (split and give name).
I want files to be named depending to their content : Bob.2112, Bob.2115, Bob.2116, etc.

If we imagine the big input text has this form :
a=aa
b=bb
c=cc
d=dd
a=aa2
b=bb2
c=cc2
and value wanted is after c=, might it help for building the command ?

@Rudi : I'm trying to play with your code (on Windows, sorry), with no success atm : awk: (FILENAME=input.txt FNR=2) fatal : can't redirect to `/' (Permission denied)

Last edited by sellig; 03-07-2015 at 04:53 PM.. Reason: typo
# 4  
Old 03-07-2015
after you have split the files,,,in the same directory

Code:
for file in F*
do
$name=$(awk -F"=" '$1=="name"{print $2}' )
cp $file $name
done

if this works , change cp to mv
# 5  
Old 03-07-2015
This is the result for me:
Code:
find 2
2
2/Bob.2113
2/Bob.2115
2/Bob.2112
2/Bob.2116
2/Bob.2111

Print the internal, new file name to stdout for debugging purposes.
And, why do you change the input file structure between posts?

---------- Post updated at 23:29 ---------- Previous update was at 23:04 ----------

To be able to handle maaany files, you might want to close (FN) just before you define the new one...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Replace content from a file and save

Hi, Right now there is a file called 'qm.ini' which is owned by mqm:mqm and I am trying to replace a line from this file with something else and save. I am using the below perl command to replace and save within a shell script with a different user called 'mqadm' which is also part of mqm... (1 Reply)
Discussion started by: bdpl
1 Replies

2. Shell Programming and Scripting

How to save sorted content of a inside the same file?

Hi All, When i use sort Test, here is the output: $ sort Test a b b c d e f g h i But the contents in the file remain unsorted, how to do that? ]$ cat Test g i (6 Replies)
Discussion started by: chandrakanth
6 Replies

3. Shell Programming and Scripting

[awk] split file1 and save it as var from file2

I have 2 files: file_1: file_2: expected result: name file: "artV1" "artV2" etc. I have: but why don;t work save to file 'out'?? (3 Replies)
Discussion started by: ffresz
3 Replies

4. Shell Programming and Scripting

split file content into specific folders

Hi I have a large text file and I want to split its content into multiple flies. this large file contains several blocks of codes separated by a comment line for each block. this comment line represents a directory path So, when separate these blocks each into a separate file, This output... (7 Replies)
Discussion started by: turki_00
7 Replies

5. Shell Programming and Scripting

Split the file based on the content

Arun kumar something somehting Enterting in to the line . . . . Some text text Finshing the sentence Some other text . . . . Again something somehting Enterting in to the line . . . . . . Again text text Finshing the sentence (6 Replies)
Discussion started by: arukuku
6 Replies

6. Shell Programming and Scripting

split file content

Hi All; I have input file like below name char(3) number number(3) inputfile namenumber xyz123abc509kai330 aca203 ald390afa000als303 I wanted to split like below:- output like this:- xyz123 abc509 kai330 aca203 ald390 (6 Replies)
Discussion started by: Jairaj
6 Replies

7. Shell Programming and Scripting

Help with rename header content based on reference file problem

I got long list of reference file >data_tmp_number_22 >data_tmp_number_12 >data_tmp_number_20 . . Input file: >sample_data_1 Math, 5, USA, tmp SDFEWRWERWERWRWER FSFDSFSDFSDGSDGSD >sample_data_2 Math, 15, UK, tmp FDSFSDFF >sample_data_3 Math, 50, USA, tmp ARQERREQR . . Desired... (7 Replies)
Discussion started by: perl_beginner
7 Replies

8. Shell Programming and Scripting

awk split and rename files

I have a file test1.html like below: <dctm_topnav_en_US> <html> ..... </html> <dctm_topnav_en_CA> <html> ..... </html> <dctm_topnav_en_FR> <html> ..... </html> I need to use awk to split this into three file names like en_US.html , en_CA.html, en_FR.html each having content between... (4 Replies)
Discussion started by: vijay52
4 Replies

9. Shell Programming and Scripting

split and rename the file

Hi All, I have a requirement .I want to split a file and the split files should have certain names. Currently when i use the split command split -1000 testdata testdata_ Then the output is testdata_aa testdata_bb testdata_cc and so on. But i want the output as testdata1.snd... (3 Replies)
Discussion started by: dnat
3 Replies

10. Shell Programming and Scripting

split file depending on content

Hi, I have a file which contains records of data. I need to split the file into multiple files depending upon the value of last field. How do i read the last field of each record in the file??? Regards, Chaitrali (4 Replies)
Discussion started by: Chaitrali
4 Replies
Login or Register to Ask a Question