Visit Our UNIX and Linux User Community


grep files without header and move to new dir


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting grep files without header and move to new dir
# 1  
Old 08-04-2008
grep files without header and move to new dir

Hi, i have number of files in a directory to be processed. the problem is some of the files does not have a header and the process is giving an error of no header found.

example of good file :

file1
HDR|20080803233401
record 1
record 2
TRA|2

example of a bad file in the same dir

file2
record 1
record 2
TRA|2


i need to move this files without header to a different directory.

please help
# 2  
Old 08-04-2008
Hope this works for you:
Code:
if [[ ! -d nohead ]]
then
        mkdir nohead
fi
for filen in $(ls file*)
do
        head=$(awk -F"|" 'NR==1 {print $1}' $filen)
        if [[ $head != "HDR" ]]
        then
                mv $filen nohead
        fi      
done

# 3  
Old 08-04-2008
You can avoid the Useless Use of ls and avoid reading the rest of each file with awk; all the above script really does is examine the first line, and print the text before any "|" (or the whole line otherwise). Assuming that logic as such is good, the following script is slightly simpler.

Code:
for filen in file*
do
  if awk '/^HDR|/ { exit 0 } { exit 1}' "$filen"
  then
    mv "$filen" nohead
  fi
done

# 4  
Old 08-04-2008
thanks guys... problem solved...
# 5  
Old 08-04-2008
Question whats the use of exit 0

I have seen many scripts where exit status is set to '0' at the last line of the program. Is there any significance to it
Say this program
echo "Hello $USER"
echo "Today is \c ";date
echo "Number of user login : \c" ; who | wc -l
echo "Calendar"
cal
exit 0

what my doubt is,
setting the exit status to some non-zero value makes sense.
Whats the use in setting it to 0, if the script is run without any error message it'll automatically set to 0 right ?
# 6  
Old 08-04-2008
Hammer & Screwdriver exit 0

This is the 'appropriate way' of writing a script.
(a) there is a clear end to the program
(b) it returns a value of zero

The second part probably requires more explanation.

Code:
# main program
blah-blah commands

# calls to another script
chk_headers
if [ "$?" -ne 0 ]
   then
   echo "Error in processing chk_headers"
   exit
fi
# calls to another script
blah-blah more stuff

exit

My main program calls and executes the 'chk_headers' script. When 'chk_headers' completes, it may return a non-zero condition. My main program checks for this. The standard is to return 0 (zero) unless an error.

Sometimes, clever programmers use this passed variable to have a sub-program (child) give some value back to the calling (parent) program.
# 7  
Old 08-05-2008
One of the main purposes of the exit code of a program is that this is what the shell's conditionals like while and if examine. So the exit code should reflect whether or not there was success (0 means yes, any other number means no).

And as usual, the proper idiomatic way to write the above conditional is to use the command directlly in the if, and avoid the Useless Use of Test, like this:

Code:
if chk_headers; then
    : nothing
else
    exitcode=$?
    echo $0: Error $exitcode in chk_headers >&2
    exit $exitcode
fi

exit 0

Notice the redirection of the error message to standard error, and the propagation of the exit code from chk_headers to any calling script. Also the error message indicates which program printed it, for somewhat improved usability.

Previous Thread | Next Thread
Test Your Knowledge in Computers #651
Difficulty: Medium
Amanda the Panda is the mascot of MOTIF.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

List files in dir and grep accordingly

bash or c-shell On Solaris 10 I need a command that will list the files of a directory, and grep each of those filenames out of a static text file, and then only echo field 2 of the static text file. Something like this: #> ls -1 /home/dir/ | each filename grep $filename static.txt |awk... (4 Replies)
Discussion started by: ajp7701
4 Replies

2. Shell Programming and Scripting

Script to move all files in a dir into a certain dir

Hello all, I'm very new to shell scripting and need quite urgently to do this thing for my student job. I have a directory called "vectors" with a bunch of files all named ".vector". also i have for each of those files a directory with the name . I now want to move each of those *.vector files... (2 Replies)
Discussion started by: sherresh
2 Replies

3. Shell Programming and Scripting

Move all files from dir and subdir to Archive with File name as complete path_filename

HI, I need to move all files from a dir & its all subdir to Archive folder which is indise dir only. and moved filename should changed to complete path ( Like Dir_subdir_subdir2_.._filename ). also all files names shoud capture in a file in order to mail I written below code ... (11 Replies)
Discussion started by: minijain7
11 Replies

4. Shell Programming and Scripting

Need a script to move the files from one dir to other other dir

Need a script to move the files from one dir to other dir and at the same time it has to read the log in the source dir. Please help me ASAP. (4 Replies)
Discussion started by: viswanathkishor
4 Replies

5. Shell Programming and Scripting

want to move files in a dir into different directories based on the filename

I want to move the files in a dir to different dirs based on their file names. Ex: i have 4 different files with name - CTS_NONE_10476031_MRL_PFT20081215a.txt CTS_NONE_10633009_MRL_PFT20091020a.txt CTS_NONE_10345673_MRL_PFT20081215a.txt CTS_NONE_10872456_MRL_PFT20091020a.txt and the 1st... (4 Replies)
Discussion started by: Sriranga
4 Replies

6. UNIX for Dummies Questions & Answers

want to move files in a dir into different directories based on the filename

I want to move the files in a dir to different dirs based on their file names. Ex: i have 4 different files with name - CTS_NONE_10476031_MRL_PFT20081215a.txt CTS_NONE_10633009_MRL_PFT20091020a.txt CTS_NONE_10345673_MRL_PFT20081215a.txt CTS_NONE_10872456_MRL_PFT20091020a.txt and the 1st... (2 Replies)
Discussion started by: Sriranga
2 Replies

7. Shell Programming and Scripting

grep for certain files using a file as input to grep and then move

Hi All, I need to grep few files which has words like the below in the file name , which i want to put it in a file and and grep for the files which contain these names and move it to a new directory , full file name -C20091210.1000-20091210.1100_SMGBSC3:1000... (2 Replies)
Discussion started by: anita07
2 Replies

8. Shell Programming and Scripting

need to move files of particular day from one dir to another dir

Hi, I have hundered's of files of the name CMP_PORT_IN_P200903271623042437_20090328122430_err.xml in error directory of todays date ie 20090328 and in the file name 5th field specifies date only now i want to move all files of 20090328 to another directory i.e reprocess directory. So... (3 Replies)
Discussion started by: ss_ss
3 Replies

9. UNIX for Dummies Questions & Answers

Using grep to move files that contain a line of text

I have a folder with about 4000 files in it. I need to extract the files that contain a certain line of text to another directory. for example files with 'ns1.biz.rr.com' need to be extracted to the directory above or some other directory. I tried using the following but was not successful. (6 Replies)
Discussion started by: spartan22
6 Replies

10. UNIX for Dummies Questions & Answers

grep data from header of files

Hello I want to grep data from header of the files . The header conatins data in this format . # $maint$ test1 # $product$ TTT I want to store maint name and product name with path of file . (12 Replies)
Discussion started by: getdpg
12 Replies

Featured Tech Videos