Reputation: 85
hello how i will at begin and end of every each new pattern in column $4 in a file for specified in desired output number of lines all the time differ along with diff. OS types in column $4
this not worked for me
awk -v RS= '{$0 = "OS_PLATFORM_VALID_BEGIN\n" $4 "\nOS_PLATFORM_VALID_END"} 1'file
awk -v RS= '{$0 = "OS_PLATFORM_VALID_BEGIN\n" $1" "$2" "$3 $4" "$5 " "$6" "$7" "$8" "$9"\nOS_PLATFORM_VALID_END"} 1' file
this not worked for me above
LIB SITE A LINUX X64 DC58 ROOM DC LOC 2.b
LIB SITE A LINUX X64 DC58 ROOM DC LOC 2.b
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
this how it should look like:
OS_PLATFORM_VALID_BEGIN
LIB SITE A LINUX X64 DC58 ROOM DC LOC 2.b
LIB SITE A LINUX X64 DC58 ROOM DC LOC 2.b
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
LIB SITE A OPENV X64 DC22 ROOM DC LOC 2.b
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
LIB SITE A WIN9K X64 DC22 ROOM DC LOC 2.b
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
LIB SITE B RHEL X64 DC10 ROOM DE LOC 3.ma
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
LIB SITE B SUSE X64 DC10 ROOM DE LOC 3.ma
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
LIB SITE A LINUX X64 DC41 ROOM DF LOC 5.p
OS_PLATFORM_VALID_END
OS_PLATFORM_VALID_BEGIN
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
LIB SITE A OPENV X64 DC41 ROOM DF LOC 5.p
OS_PLATFORM_VALID_END
Upvotes: 1
Views: 59
Reputation: 626861
You may use
awk 'BEGIN{print "OS_PLATFORM_VALID_BEGIN"}
{ if (!seen[$4]++ && NR>1) {
print "OS_PLATFORM_VALID_END" ORS "OS_PLATFORM_VALID_BEGIN" }
}1;
END{print "OS_PLATFORM_VALID_END"}' file > outfile
See the online awk
demo
Details
BEGIN{print "OS_PLATFORM_VALID_BEGIN"}
- at the start of the script execution, prints OS_PLATFORM_VALID_BEGIN
{ if (!seen[$4]++ && NR>1) { print "OS_PLATFORM_VALID_END" ORS "OS_PLATFORM_VALID_BEGIN" } }1
- if there is a unqiue occurrence of Field 4 value and it is not a first line, print OS_PLATFORM_VALID_END
and OS_PLATFORM_VALID_BEGIN
lines, else, just print the line (1
at the end is the default line output triggering construct)END{print "OS_PLATFORM_VALID_END"}
- the OS_PLATFORM_VALID_END
is printed at the end of the script.Upvotes: 1