awk根据第4列在每个uniq模式之前添加单词

awk根据第4列在每个uniq模式之前添加单词,awk,pattern-matching,add,Awk,Pattern Matching,Add,您好,我将如何在文件$4列中每个新模式的开始和结束处指定所需的输出 由于$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_PLATFOR

您好,我将如何在文件$4列中每个新模式的开始和结束处指定所需的输出 由于$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 '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

详细信息

  • BEGIN{print“OS\u PLATFORM\u VALID\u BEGIN”}
    -在脚本执行开始时,打印
    OS\u PLATFORM\u VALID\u BEGIN
  • {if(!seen[$4]+&&NR>1){print“OS_PLATFORM_VALID_END”或“OS_PLATFORM_VALID_BEGIN”}1
    -如果字段4值出现异常,并且不是第一行,则打印
    OS_PLATFORM_VALID_END
    OS_PLATFORM_VALID_BEGIN
    行,否则,只打印该行(
    1
    末尾是默认的行输出触发结构)
  • END{print“OS\u PLATFORM\u VALID\u END”}
    -脚本末尾打印
    OS\u PLATFORM\u VALID\u END

Stribizew,谢谢你,它几乎可以工作了,但它增加了一些行,而不是我完全需要看到的完整测试我做了@da4fdsa6,如果你先对行进行排序会怎么样?请参阅Stribizew,wiktor我面临一个问题,如果我像你提到的那样对它们进行排序,我会增加一列,让你看到它将我增加一倍,即使我将添加到colum我认为它将把整个.OS= Linux作为一个UNIQ模式,例如在我的帮助栏中看到值“LIB站点A OPEXX64 DC22房间DC LOC 2 .B0xE3”它的两个余下的第一块对于OS=Linux是可以的,看到一个这样调整的比特,它工作AWK“开始{打印”OSpPialFuthValueRead } {}(!SEED[$4]+&&NR>1){print“OS_PLATFORM_VALID_END”或“OS_PLATFORM_VALID_BEGIN”}1;END{print“OS_PLATFORM_VALID_END”}file1@da4fdsa6对不起,我现在明白了,我有一个输入错误,我在主循环中留下了
$0