Usage of tail command in .awk


 
Thread Tools Search this Thread
Contact Us Post Here to Contact Site Administrators and Moderators How to Post in the The UNIX and Linux Forums Usage of tail command in .awk
# 1  
Old 05-13-2014
Usage of tail command in .awk

Hi,

I want to do file format using awk script, for that i wan to use 'tail'. Here is the scenario. I will be having set of files in a directory. Those files i need to write to another directory with same file name, but while writing the file to out directory, i need to write the last line as first line and the rest will follow in the same order. For example, the file has below content
HTML Code:
one
two
three
four
The file with the same name in output directory should be like
HTML Code:
four
one
two
three
I tried like below, but wasn't working

Code:
BEGIN {
	while ( ( "ls -l "ARGV[1] | getline line ) > 0 ) 
	{
		n = split(line, fileName, " ")
		if (fileName[n] > 0)
		{
			count=0
			while ((getline < (ARGV[1] "/" fileName[n]))>0) 
			{				
				dLine = $0
				if (count == 0) 
				{
					#temp = `$(tail -1 $(ARGV[1] "/" fileName[n]))`
					sed -ne 1 $ARGV[1] "/" fileName[n] > ARGV[2] "/" fileName[n]
					printf "\n" >> ARGV[2] "/" fileName[n]
					printf dLine >> ARGV[2] "/" fileName[n]
					printf "\n" >> ARGV[2] "/" fileName[n]
				}
				
				if (count != 0 && substr(dLine ,1,1) != "H")
				{
					printf dLine >> ARGV[2] "/" fileName[n]
					printf "\n" >> ARGV[2] "/" fileName[n]
				}
				count = count+1
			};	
		}
	}
}

Venkata Madhu
# 2  
Old 05-13-2014
A simple approach is to count the number of lines with wc, then use tail and head.

Regards,
Alister

---------- Post updated at 01:43 PM ---------- Previous update was at 01:40 PM ----------

More efficiently, dispense with wc and simply use tail and sed (using $ to avoid reprinting the final line).

Regards,
Alister
# 3  
Old 05-13-2014
`` and $( ) are shell syntax, they do not work inside awk. If they are processed at all they will be processed once, before awk is run, by the shell.

It might be easier to use awk's built-in file processing loop than fighting it by cramming it all in BEGIN. Less duplicated logic.

How about this:

Code:
find path/to/folder -type f | xargs awk '
# Call this function whenever the filename changes
function flush(F) {
        if(L) {
                F=LF;
                sub(OLDNAME, NEWNAME, F);
                if(F == LF)
                        print "WARNING, outfile=infile" >"/dev/stderr";
                else
                {
                        print LINE[L] > LF; # Print last line first
                        for(N=1; N<L; N++) print LINE[N] > LF; # Print other lines in order
                        close(LF); # Close file to avoid too-many-files error
                }
                L=0; # Reset line number
        }

        LF=FILENAME; # Store filename
}

LF != FILENAME { flush(); }
# Store every line from current file
{ LINE[++L]=$0 }
# Have to flush the very last file too
END { flush(); }' OLDNAME="/abc" NEWNAME="/def"

Use nawk on Solaris.
# 4  
Old 05-13-2014
OP, Why are you trying to write a simple sh script in awk. A simple for-loop should do.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Tail -f Command help

Hi Team, Can anyone help me here: I have to access server logs via putty and these logs file is a trailing file (continously updating) with ERROR and WARNINGS... I need to know if I can pull this trailing file to a local drive so that I can do some higlighting on some keywords through Notepad... (13 Replies)
Discussion started by: jitensetia
13 Replies

2. Shell Programming and Scripting

usage of Awk command for output

Hi Experts, I have a Text file generated as below; <NAME> NEW#<technicalName><TAB> <Version> OLD#<technicalName><TAB> <Version> e.g. CH_PPV_AUDIT_DISTRIBUTOR NEW#EL_CFG_FTP_DISTRIBUTOR 2.1.0.upc2 OLD#EL_CFG_FTP_DISTRIBUTOR 2.1.0.upc1... (19 Replies)
Discussion started by: rajangupta2387
19 Replies

3. Shell Programming and Scripting

tail command help

Hi does anyone know how to create a file using the tail command? My book has this file I need to create and it says to use the tail command and that it is possible but I have no idea. Thanks. (4 Replies)
Discussion started by: drew211
4 Replies

4. Shell Programming and Scripting

usage of AWK command under perl script

i have two files as shown below t1.txt: argument1 argu2 argu37 t2.txt: 22 33 44 i want o/p as argument1 22 argu2 33 argu37 44 i am trying to merge two file under perl script using following system("paste t1.txt t2.txt | awk... (3 Replies)
Discussion started by: roopa
3 Replies

5. UNIX for Dummies Questions & Answers

Command to display the space usage (memory usage) of a specific directory.

Hi all, Can you please tell me the command, with which one can know the amount of space a specific directory has used. df -k . ---> Displays, the amount of space allocated, and used for a directory. du -k <dir name> - gives me the memory used of all the files inside <dir> But i... (2 Replies)
Discussion started by: abhisheksunkari
2 Replies

6. Shell Programming and Scripting

Help with tail command

Hi All, My query seems to be silly but Iam unable to find where the exact problem lies. I have a script to unzip set of files here is the script #!/bin/ksh Count=`cat /home/gaddamja/Tempfile | wc -l` while do Filename=`cat /home/gaddamja/Tempfile |tail -$Count | head -1` cd... (7 Replies)
Discussion started by: jagadish_gaddam
7 Replies

7. HP-UX

how can I find cpu usage memory usage swap usage and logical volume usage

how can I find cpu usage memory usage swap usage and I want to know CPU usage above X% and contiue Y times and memory usage above X % and contiue Y times my final destination is monitor process logical volume usage above X % and number of Logical voluage above can I not to... (3 Replies)
Discussion started by: alert0919
3 Replies

8. Shell Programming and Scripting

awk and grep command usage

hi Can anyone explain me how these two commands awk and grep works in a ksh shell Thanks Babu (1 Reply)
Discussion started by: ksmbabu
1 Replies

9. Shell Programming and Scripting

tail command..

I was wondering how can I do this I have file myfile.txt wc -l is: 5 000 000 I have to remove first 1 000 000 lines from header.. I tryed with tail -4000000 myfile.txt>newfile.txt but it does not work... any help?? (2 Replies)
Discussion started by: amon
2 Replies

10. Shell Programming and Scripting

tail command

Hi , I have found a interesting thing about tail command: when I tried to use 'tail -1 *' to look at every file with the current derectory, I only got one line of result of one file. But if I use 'head -1 *', I would get multiple lines. Is there a way to do get multiple lines with 'tail -1 *'... (3 Replies)
Discussion started by: whatisthis
3 Replies
Login or Register to Ask a Question