How to change name of the file with first line of the file which has some unwanted text in it?


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers How to change name of the file with first line of the file which has some unwanted text in it?
# 1  
Old 02-05-2019
How to change name of the file with first line of the file which has some unwanted text in it?

I have a log file, which i have divided into 14 files using csplit, the file looks like below

Code:
test-000000
test-000001 #and so on until 14

now I want all the 14 files generated to be renamed as the some part of test in first line of the file how can i eliminate the unwanted text?

sample first line of the file looks like, all the files have similar format

Code:
0-00:01:01.412 <main>:[UNIT]:[info]:  Test: SCHEDULE_REQUEST_TestCase ...

I want to rename the file as SCHEDULE_REQUEST_TestCase.log
I know that mv command can be used to rename the file, and read or head can be used to read the first line of the file, but i want to remove the text before SCHEDULE and dots after TestCase.

This is what i have at the moment

Code:
line="$(head -n 1 test-000000)"
mv test-000000 ${line}.log

I want to perform this for all the files i have generated i don't really get how to do that and eliminate the unwanted text from the first line? I guess sed or awk can be used to eliminate the text I have started shell scripting like five days ago any help would be greatly appreciated.
# 2  
Old 02-05-2019
The following is totally untested, but should come close to what you want. If the lines printed out by this look like the mv commands you hope to run, remove the echo from the awk script and run it again to actually remove the files:
Code:
awk 'FNR == 1 {print "echo mv",  FILENAME, $4 ".log"}' test-?????? | sh

On some systems, this could be made to run considerably faster by changing it to:
Code:
awk 'FNR == 1 {print "echo mv",  FILENAME, $4 ".log"; nextfile}' test-?????? | sh

but the awk nextfile command is not present in all versions of awk and you didn't bother to tell us what operating system or shell you're using (so we can't rely on it being available in your environment).
This User Gave Thanks to Don Cragun For This Post:
# 3  
Old 02-06-2019
Thanks Don Cragun, it is prints what i wanted it to look like . I am using bash shell, I have used nextfile displayed the same thing.

but how can do the same thing for the all the 14 files I have given that i standing on the current level , without having to do this manually for the every file

all the files are named similarly like

Code:
test-000000
test-000001
test-000002

I know i should loop through but was not sure how to increment the loop to go to next file, how can i achieve this?
# 4  
Old 02-06-2019
Don Cragun's little awk script does exactly that - loop through ALL test-?????? files around, where ?????? matches the file names the sample numbers you post: 000000, 000001, 000002, etc.
If - as he explains - the echo command is removed, and the schript's output is piped through sh, all your test files should be renamed according to your spec. That is - if all files contain DIFFERENT strings as $4 in their first line. If not, files with lower numbers might be overwritten by the ones with higher number and identical $4.


EDIT: To avoid that problem, consider this small adaption of Don Cragun's script:


Code:
$ awk 'FNR == 1 {while ($4 in FNARR) $4 = $4 "_" ++CNT; FNARR[$4];  print "echo mv",  FILENAME, $4 ".log"}' test-?????? | sh
mv test-000000 SCHEDULE_REQUEST_TestCase.log
mv test-000001 SCHEDULE_REQUEST_TestCase_1.log
mv test-000002 SCHEDULE_REQUEST_TestCase_2.log
mv test-000003 SCHEDULE_REQUEST_TestCase_3.log
etc...


Last edited by RudiC; 02-06-2019 at 05:44 AM..
This User Gave Thanks to RudiC For This Post:
# 5  
Old 02-06-2019
Thanks Rudic! i have replaced the ?????? in the awk script and substituted them with numbers now i have tried it and it works.

I will try your suggestion as well.
# 6  
Old 02-06-2019
You don't need to "substitute them with numbers" - the shell will do that for you. Run the script with the -x (xtrace) option set, and you will see...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

awk to update file with partial matching line in another file and append text

In the awk below I am trying to cp and paste each matching line in f2 to $3 in f1 if $2 of f1 is in the line in f2 somewhere. There will always be a match (usually more then 1) and my actual data is much larger (several hundreds of lines) in both f1 and f2. When the line in f2 is pasted to $3 in... (4 Replies)
Discussion started by: cmccabe
4 Replies

2. UNIX for Dummies Questions & Answers

Extracting lines from a text file based on another text file with line numbers

Hi, I am trying to extract lines from a text file given a text file containing line numbers to be extracted from the first file. How do I go about doing this? Thanks! (1 Reply)
Discussion started by: evelibertine
1 Replies

3. Shell Programming and Scripting

add line in file and change file name

HI I have 100 files in below folder:- /home/lkj/TEST File name like below undo_ARL01003_120907-155022.mos undo_ARL01006_120908-155042.mos i want replace one first line of each file to pt all i want change file name as below. ARL01003.mos ARL01006.mos Thanks (2 Replies)
Discussion started by: asavaliya
2 Replies

4. Shell Programming and Scripting

how read specific line in a file and write it in a new text file?

I have list of files in a directory 'dir'. Each file is of type HTML. I need to read each file and get the string which starts with 'http' and write them in a new text file. How can i do this shell scripting? file1.html <head> <url>http://www.google.com</url> </head> file2.html <head>... (6 Replies)
Discussion started by: vel4ever
6 Replies

5. Shell Programming and Scripting

editing line in text file adding number to value in file

I have a text file that has data like: Data "12345#22" Fred ID 12345 Age 45 Wilma Dino Data "123#22" Tarzan ID 123 Age 33 Jane I need to figure out a way of adding 1,000,000 to the specific lines (always same format) in the file, so it becomes: Data "1012345#22" Fred ID... (16 Replies)
Discussion started by: say170
16 Replies

6. Shell Programming and Scripting

[Bash]Attempting to Merge text from one file into another file at the line directly under a word

Hello, This is my first post on the forums. So I want to start by thanking anyone who is kind enough to read this post and offer advise. I hope to be an active contributor now that I've found these forums. I have an issue that I figure would be a good first post.. I have 2 text files... (5 Replies)
Discussion started by: efciem
5 Replies

7. Shell Programming and Scripting

PHP header text/csv unwanted line feed character

We have successfully created a comma delimited file, the results are correct from an sql database query. When using the following headers to print the file using print $data, an extra line feed is added and a blank row appears on the top of the data in Excel: header("Expires: 0"); ... (0 Replies)
Discussion started by: ifimbres
0 Replies

8. Shell Programming and Scripting

Script to change file contents line by line

Hi, I'm struggling to write a script to do the following, -will go through each line in the file -in a specific character positions, changes the value to a new value -These character positions are fixed througout the file ----------------------- e.g.: file1.sh will have the following 3... (4 Replies)
Discussion started by: vini99
4 Replies

9. Shell Programming and Scripting

Need to insert new text and change existing text in a file using SED

Hi all, I need to insert new text and change existing text in a file. For that I used the below line in the command line and got the expected output. sed '$a\ hi... ' shell > shell1 But I face problem when using the same in script. It is throwing the error as, sed: command garbled:... (4 Replies)
Discussion started by: iamgeethuj
4 Replies

10. UNIX for Dummies Questions & Answers

how can search a String in one text file and replace the whole line in another file

i am very new to UNIX plz help me in this scenario i have two text files as below file1.txt name=Rajakumar. Discipline=Electronics and communication. Designation=software Engineer. file2.txt name=Kannan. Discipline=Mechanical. Designation=CADD Design Engineer. ... (6 Replies)
Discussion started by: kkraja
6 Replies
Login or Register to Ask a Question