Shell script help [was Tanmoy]

Below is the line

GMDCOM.27936 [Tue Oct  1 13:32:40 2013]: Process Request <36812974>

i want to display

[Tue Oct  1 13:32:40 2013]: Process Request <36812974> 

in a new file using shell script.
Please help me.

Hi,

Could you please try following code.

sed 's/GMDCOM.27936 //g' new_line_new_file > Output_needed

Let us say our input file is new_line_new_file and output file is Output_needed.

Thanks,
R. Singh

[Tue Oct 1 13:32:40 2013]: Process Request <36812974>

This above one should be the first line.

Any line before this line not to be displayed and skipped. totally. But there are 3 more than before that which is getting displayed with your code.

---------- Post updated at 04:48 PM ---------- Previous update was at 04:46 PM ----------

[Tue Oct 1 13:32:40 2013]: Process Request <36812974>

This above one should be the first line.

Any line before this line not to be displayed and skipped. totally. But there are 3 more lines before that which is getting displayed using your code.

Hi,

Could you please post the exact Input as well as desired Output for same. It will be easier for us to help you.

Thanks,
R. Singh

  1. Please follow forum rules, "Tanmoy" is not a useful thread title.

  2. If you want help instead of us playing guessing games, please show an example of
    actual input, and expected output. You original post said nothing about "3 lines"

Input file lets say abc.log contains the below lines.

[Tue Oct  1 13:28:23 2013]: file reopened from GMDCOM with PID <27936>.
[Tue Oct  1 13:28:23 2013]: GMDCOM: Process <27936> created a running file.
GMDCOM [Tue Oct  1 13:28:24 2013]: DELTA MODE Flag OFF!
GMDCOM.27936 [Tue Oct  1 13:32:40 2013]: Process Request <36812974>

I want to skip the first 3 lines and start displaying from the 4th line in the new file.
But the output file will only contain the date, time and process request as given below.

[Tue Oct  1 13:32:40 2013]: Process Request <36812974>

Hi,

Please use the following code.

awk 'NR==4 {print substr($0,15) }' test_data1211

Let us say test_data1211 is the input file.

Thanks,
R. Singh

It is displaying the 3rd line but I want to display the all the lines from 4th line.

Hi,

Please check my previous post itself I have edited that.

Thanks,
R. Singh

Thanks a lot Ravinder. Its working. Can you help me please in explaining the code since i am new to shell script.

NR==4 represents the line#4 and then 
substr($0,15) means we are creating a substring with line 4th from 16th Character.

Hope this helps.

Thanks,
R. Singh

1 Like

Thanks a lot.:b:

Try works for given input

$ cat <<eof | tail -1 | cut -f2- -d ' '
[Tue Oct  1 13:28:23 2013]: file reopened from GMDCOM with PID <27936>.
[Tue Oct  1 13:28:23 2013]: GMDCOM: Process <27936> created a running file.
GMDCOM [Tue Oct  1 13:28:24 2013]: DELTA MODE Flag OFF!
GMDCOM.27936 [Tue Oct  1 13:32:40 2013]: Process Request <36812974>
eof

[Tue Oct  1 13:32:40 2013]: Process Request <36812974>

After displaying the below line.

[Tue Oct  1 13:32:40 2013]: Process Request <36812974>

How to I display the rest of the lines using a while loop.
Below are the lines,,,

[Tue Oct  1 13:37:38 2013]: Process Request <36812985>
[Tue Oct  1 13:37:53 2013]: Process Request <36812986>
[Tue Oct  1 13:37:54 2013]: Process Request <36812987>
[Tue Oct  1 13:37:57 2013]: Process Request <36812996>
[Tue Oct  1 13:38:06 2013]: Process Request <36812998>
[Tue Oct  1 13:38:14 2013]: Process Request <36813001>
[Tue Oct  1 13:38:20 2013]: Process Request <36813004>
[Tue Oct  1 13:38:27 2013]: Process Request <36813007>
[Tue Oct  1 13:38:29 2013]: Process Request <36813009>
[Tue Oct  1 13:38:31 2013]: Process Request <36813010>

and it continues like this.....how do i display all these lines and redirect the output to a file.

Try:

sed -n '/Process Request/s/^[^]]*[/[/p' file > newfile

or try:

awk '/Process Request/{$1=x; print}' FS=[ OFS=[ file > newfile

I guess I am not clear with the requirement. Below is the sample file.

[Tue Oct  1 13:28:23 2013]: file reopened from GMDCOM with PID <27936>.
[Tue Oct  1 13:28:23 2013]: GMDCOM: Process <27936> created a running file.
GMDCOM [Tue Oct  1 13:28:24 2013]: DELTA MODE Flag OFF!
GMDCOM.27936 [Tue Oct  1 13:32:40 2013]: Process Request <36812974>
GMDCOM.27936 [Tue Oct  1 13:37:38 2013]: Process Request <36812985>
GMDCOM.27936 [Tue Oct  1 13:37:53 2013]: Process Request <36812986>
GMDCOM.27936 [Tue Oct  1 13:37:54 2013]: Process Request <36812987>
GMDCOM.27936 [Tue Oct  1 13:37:57 2013]: Process Request <36812996>
GMDCOM.27936 [Tue Oct  1 13:38:06 2013]: Process Request <36812998>
GMDCOM.27936 [Tue Oct  1 13:38:14 2013]: Process Request <36813001>
GMDCOM.27936 [Tue Oct  1 13:38:20 2013]: Process Request <36813004>
GMDCOM.27936 [Tue Oct  1 13:38:27 2013]: Process Request <36813007>
GMDCOM.27936 [Tue Oct  1 13:38:29 2013]: Process Request <36813009>
GMDCOM.27936 [Tue Oct  1 13:38:31 2013]: Process Request <36813010>
GMDCOM.27936 [Tue Oct  1 13:38:33 2013]: Process Request <36813012>
GMDCOM.27936 [Tue Oct  1 13:38:37 2013]: Process Request <36813015>
GMDCOM.27936 [Tue Oct  1 13:38:57 2013]: Process Request <36813017>
GMDCOM.27936 [Tue Oct  1 13:39:19 2013]: Process Request <36813018>
GMDCOM.27936 [Tue Oct  1 13:39:25 2013]: Process Request <36813031>
GMDCOM.27936 [Tue Oct  1 13:39:26 2013]: Process Request <36813032>
GMDCOM.27936 [Tue Oct  1 13:39:31 2013]: Process Request <36813033>
GMDCOM.27936 [Tue Oct  1 13:39:35 2013]: Process Request <36813034>
GMDCOM.27936 [Tue Oct  1 13:39:42 2013]: Process Request <36813035>

I need to display all the records from the fourth line till the end. My display would be somewhat like the one I am giving below.

[Tue Oct  1 13:32:40 2013]: Process Request <36812974>
[Tue Oct  1 13:37:38 2013]: Process Request <36812985>
[Tue Oct  1 13:37:53 2013]: Process Request <36812986>
[Tue Oct  1 13:37:54 2013]: Process Request <36812987>
[Tue Oct  1 13:37:57 2013]: Process Request <36812996>
[Tue Oct  1 13:38:06 2013]: Process Request <36812998>
[Tue Oct  1 13:38:14 2013]: Process Request <36813001>
[Tue Oct  1 13:38:20 2013]: Process Request <36813004>
[Tue Oct  1 13:38:27 2013]: Process Request <36813007>
[Tue Oct  1 13:38:29 2013]: Process Request <36813009>
[Tue Oct  1 13:38:31 2013]: Process Request <36813010>
[Tue Oct  1 13:38:33 2013]: Process Request <36813012>
[Tue Oct  1 13:38:37 2013]: Process Request <36813015>
[Tue Oct  1 13:38:57 2013]: Process Request <36813017>
[Tue Oct  1 13:39:19 2013]: Process Request <36813018>
[Tue Oct  1 13:39:25 2013]: Process Request <36813031>
[Tue Oct  1 13:39:26 2013]: Process Request <36813032>
[Tue Oct  1 13:39:31 2013]: Process Request <36813033>

and it continues.......till the last record...Please help..

Hi,

Please use the following code.

sed -n '4,$p' actual_reqiure

Output wil be as follows.

GMDCOM.27936 [Tue Oct 1 13:32:40 2013]: Process Request <36812974>
GMDCOM.27936 [Tue Oct 1 13:37:38 2013]: Process Request <36812985>
GMDCOM.27936 [Tue Oct 1 13:37:53 2013]: Process Request <36812986>
GMDCOM.27936 [Tue Oct 1 13:37:54 2013]: Process Request <36812987>
GMDCOM.27936 [Tue Oct 1 13:37:57 2013]: Process Request <36812996>
GMDCOM.27936 [Tue Oct 1 13:38:06 2013]: Process Request <36812998>
GMDCOM.27936 [Tue Oct 1 13:38:14 2013]: Process Request <36813001>
GMDCOM.27936 [Tue Oct 1 13:38:20 2013]: Process Request <36813004>
GMDCOM.27936 [Tue Oct 1 13:38:27 2013]: Process Request <36813007>
GMDCOM.27936 [Tue Oct 1 13:38:29 2013]: Process Request <36813009>
GMDCOM.27936 [Tue Oct 1 13:38:31 2013]: Process Request <36813010>
GMDCOM.27936 [Tue Oct 1 13:38:33 2013]: Process Request <36813012>
GMDCOM.27936 [Tue Oct 1 13:38:37 2013]: Process Request <36813015>
GMDCOM.27936 [Tue Oct 1 13:38:57 2013]: Process Request <36813017>
GMDCOM.27936 [Tue Oct 1 13:39:19 2013]: Process Request <36813018>
GMDCOM.27936 [Tue Oct 1 13:39:25 2013]: Process Request <36813031>
GMDCOM.27936 [Tue Oct 1 13:39:26 2013]: Process Request <36813032>
GMDCOM.27936 [Tue Oct 1 13:39:31 2013]: Process Request <36813033>
GMDCOM.27936 [Tue Oct 1 13:39:35 2013]: Process Request <36813034>
GMDCOM.27936 [Tue Oct 1 13:39:42 2013]: Process Request <36813035>

Please let me know if this helps.

Thanks,
R. Singh

sed -ne '4,$s/GMDCOM.27936//p' input_file 

@ Ravinder: Please note that your code is not performing substitution.

Thanks greet_sed for noticing that, here is an awk approach for same.

awk '
NR==1 || NR==2 || NR==3 || NR==4 {next}
sub("GMDCOM.27936 ",X)' file_name

Output will be as follows.

[Tue Oct 1 13:37:38 2013]: Process Request <36812985>
[Tue Oct 1 13:37:53 2013]: Process Request <36812986>
[Tue Oct 1 13:37:54 2013]: Process Request <36812987>
[Tue Oct 1 13:37:57 2013]: Process Request <36812996>
[Tue Oct 1 13:38:06 2013]: Process Request <36812998>
[Tue Oct 1 13:38:14 2013]: Process Request <36813001>
[Tue Oct 1 13:38:20 2013]: Process Request <36813004>
[Tue Oct 1 13:38:27 2013]: Process Request <36813007>
[Tue Oct 1 13:38:29 2013]: Process Request <36813009>
[Tue Oct 1 13:38:31 2013]: Process Request <36813010>
[Tue Oct 1 13:38:33 2013]: Process Request <36813012>
[Tue Oct 1 13:38:37 2013]: Process Request <36813015>
[Tue Oct 1 13:38:57 2013]: Process Request <36813017>
[Tue Oct 1 13:39:19 2013]: Process Request <36813018>
[Tue Oct 1 13:39:25 2013]: Process Request <36813031>
[Tue Oct 1 13:39:26 2013]: Process Request <36813032>
[Tue Oct 1 13:39:31 2013]: Process Request <36813033>
[Tue Oct 1 13:39:35 2013]: Process Request <36813034>
[Tue Oct 1 13:39:42 2013]: Process Request <36813035>

Thanks,
R. Singh

@RavinderSingh13

No need of calling sub function.

$ awk '/Process Request/{$1="";print}' file

OR

$ grep 'Process Request' file | cut -f2- -d ' '  

Results

[Tue Oct 1 13:32:40 2013]: Process Request <36812974>
[Tue Oct 1 13:37:38 2013]: Process Request <36812985>
[Tue Oct 1 13:37:53 2013]: Process Request <36812986>
[Tue Oct 1 13:37:54 2013]: Process Request <36812987>