Hi,
I have below file, each line that starts with /* marks the beginning of the a new job.
/* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /home2/proddata/bin/moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/tmp/cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
ENDJOB
/* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /home3/ref_files/download/prepareDDRG.data
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
ENDJOB
/* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /home2/proddata/bin/moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/tmp/cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
ENDJOB
i want to get rid of the line ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
whereever the new job starts with FILE_TRIGGER. Please assist
Hi,
Try:
sed -n -e '/\/\*/,/ENDJOB/{/FILE_TRIGGER/H' -e '/ENVAR ENV/!b' -e 'x' -e '/FILE_TRIGGER/!b' -e 'x' -e 'p' -e 'x' -e '}' file
Regards.
Here is an awk solution:
awk '
$2 ~ "^FILE_TRIGGER" {gsub("\nENVAR ENV=[^\n]*\n","")}
NF{printf("%s", "/* -"$0)}' RS='/[*] -' FS='\n\n' infile
>>cat test2.sh
awk '
$2 ~ "^FILE_TRIGGER" {gsub("\nENVAR ENV=[^\n]*\n","")}
NF{printf("%s", "/* -"$0)}' RS='/
[*] -' FS='\n\n' txt
>>./test2.sh
awk: syntax error near line 2
awk: bailing out near line 2
---------- Post updated at 07:09 PM ---------- Previous update was at 07:07 PM ----------
Sed didnt work either it just displayed one line
>>sed -n -e '/\/\*/,/ENDJOB/{/FILE_TRIGGER/H' -e '/ENVAR ENV/!b' -e 'x' -e '/FILE_TRIGGER/!b' -e 'x' -e 'p' -e 'x' -e '}' txt
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
---------- Post updated at 07:15 PM ---------- Previous update was at 07:09 PM ----------
Just to be clear, I want my output to look like this
/* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /home2/proddata/bin/moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/tmp/cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
ENDJOB
/* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /home3/ref_files/download/prepareDDRG.data
ENDJOB
/* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /home2/proddata/bin/moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/tmp/cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/home2/autosys/cmdsprod/profiles/daily
ENDJOB
this example has just one file trigger my real file has multiple of these and are all in between UNIX_JOB
You're using Solaris. Try /usr/xpg4/bin/awk or nawk inplace of awk
>>cat test2.sh
/usr/xpg4/bin/awk '
$2 ~ "^FILE_TRIGGER" {gsub("\nENVAR ENV=[^\n]*\n","")}
NF{printf("%s", "/* -"$0)}' RS='/
[*] -' FS='\n\n' txt
OUTPUT-------
/* - /* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* -* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /* -home3/* -ref_files/* -download/* -prepareDDRG.data
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
Sorry I thought your input file was double spaced (blank line between each data line)
You should use
```text
and
```
tags around your data not ``` and ```
.
Also are some of those lines indented with spaces, it looks like they might be...This should work a little better:
/usr/xpg4/bin/awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{printf "%s","/* -"$0}' RS='/[*] -' FS='\n' infile
No luck
>>cat test2.sh
/usr/xpg4/bin/awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{printf "%s","/* -"$0}' RS='/
[*] -' FS='\n' txt
[meandmy(autosys)]/usr/autosys/shells/TWS
>>./test2.sh
/* - /* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* -* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /* -home3/* -ref_files/* -download/* -prepareDDRG.data
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
Yes, I just picked up that data lines are indented - the updated code in post #7 should work OK for your actual file format.
I dont think its working.. see below. i used the code from #7 and still messed up result
>>cat test2.sh
/usr/xpg4/bin/awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{printf "%s","/* -"$0}' RS='/
[*] -' FS='\n' txt
>>./test2.sh
/* - /* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* -* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /* -home3/* -ref_files/* -download/* -prepareDDRG.data
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
Still looks like some trouble slight tweaking is needed with the RS=value. Try this adjustment:
awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{printf "%s","/* -"$0}' RS='/\\* -' FS='\n' infile
Nope - yu see its changeing all the
/
to
/* -
. I dont want that. onlything i need is if job is FILE_TRIGGER.. remove the line that has
ENAVR ENV=/home2******
>>cat test2.sh
/usr/xpg4/bin/awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{printf "%s","/* -"$0}' RS='/\\* -' FS='\n' txt
[meandmy(autosys)]/usr/autosys/shells/TWS
>>./test2.sh
/* - /* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyDdrgRcvF -----------------
FILE_TRIGGER CMMD003F
AGENT CMDSHP
USER autosys
AFTER CMMM002J
/* -* "watch prepareDDRG.data(www, xtmp.htm, Tpmplant.exe"
FILENAME /* -home3/* -ref_files/* -download/* -prepareDDRG.data
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
/* -* ----------------- cmdsMlyMoveTPMPLANTJ -----------------
UNIX_JOB CMMM002J
CMDNAME /* -home2/* -proddata/* -bin/* -moveTPMPLANT.sh
AGENT CMDSHP
USER proddata
AFTER CMMU001J
/* -* "DDRG monthly processing. This job can FAIL if the files are n
ENVAR STDOUT=/* -tmp/* -cmdsMlyMoveTPMPLANTJ
ENVAR ENV=/* -home2/* -autosys/* -cmdsprod/* -profiles/* -daily
ENDJOB
Apologies, support for multi-character FS is a GNU extension and will not be supported in Solaris awk.
Are those blank lines between each job? If we can rely on that the following should work:
/usr/xpg4/bin/awk '
$2 ~ "^ *FILE_TRIGGER"{gsub(" *ENVAR ENV=/home2/[^\n]*\n","")}
NF{print $0 FS}' RS= FS='\n' txt
Sorry, I read about a little fast and I thought you just wanted to get the line in blocks with FILE_TRIGGER.So, my sed solution is KO.
Regards.
---------- Post updated at 01:43 PM ---------- Previous update was at 11:38 AM ----------
I really do bad read, try this sed solution (very simple):
sed -e '/FILE_TRIGGER/,/ENDJOB/{/ENVAR ENV/d;}' file
Regards.