awk根据第4列在每个uniq图案前添加单词。

问题描述 投票:0回答:1

你好,我将在开始和结束的每一个新的模式在第4列在文件中指定在所需的输出行数所有的时间不同,随着差异。OS类型在第4列

这不是为我工作

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

这不为我工作以上

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

这应该是怎样的样子。

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
awk pattern-matching add
1个回答
1
投票

您可以使用

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

在线 awk 演示

详细内容

  • BEGIN{print "OS_PLATFORM_VALID_BEGIN"} - 在脚本执行开始时,打印出 OS_PLATFORM_VALID_BEGIN
  • { if (!seen[$4]++ && NR>1) { print "OS_PLATFORM_VALID_END" ORS "OS_PLATFORM_VALID_BEGIN" } }1 - 如果字段4的值出现了不规则的情况,而且不是第一行,则打印出来。OS_PLATFORM_VALID_ENDOS_PLATFORM_VALID_BEGIN 行,否则,只需打印该行(1 最后是默认的行输出触发结构)
  • END{print "OS_PLATFORM_VALID_END"} - 的 OS_PLATFORM_VALID_END 是打印在脚本的最后。
© www.soinside.com 2019 - 2024. All rights reserved.