Scripting awk+;删除除第一行uniq(文件名)之外的所有非uniq行

Scripting awk+;删除除第一行uniq(文件名)之外的所有非uniq行,scripting,sed,awk,Scripting,Sed,Awk,嗨,我有以下文件如何通过sed删除除第一个uniq文件名以外的所有文件名行例如,需要删除除第一个以外的所有文件名行: FILE NAME: /dir1/dir2/dir3/dir4/dir5/file FILE NAME: /dirA/dirB/dirC/dirD/dirE/file 文件: FILE NAME: /dir1/dir2/dir3/dir4/dir5/file PARAMETER NAME: blablabla TARGET FILE: 12 SOURCE FILE: 565 F

嗨,我有以下文件如何通过sed删除除第一个uniq文件名以外的所有文件名行例如,需要删除除第一个以外的所有文件名行:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
文件:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 12
SOURCE FILE: 565
FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 18
SOURCE FILE: 552
FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 14
SOURCE FILE: 559
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 134
SOURCE FILE: 344
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 13
SOURCE FILE: 445
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 13
SOURCE FILE: 434

如果您只需要唯一的文件名行,如为显示的示例列出的两行

grep“^FILE NAME”input.txt | sort | uniq


更新:
我不确定你到底想要什么。

sort | uniq
过滤器将在以
“^FILE NAME”
开头的行中获取所有唯一的路径名。如果您的示例输入和输出不正确,您可能希望使用awk中的
编辑
按钮来纠正该错误。

,问题标记为:

awk '$0  ~ /^FILE NAME: / { if (count++ == 0) print; }
     $0 !~ /^FILE NAME: / {                   print; }'
您可能可以使用
sed
,但它并不特别干净


评论稍微澄清了这个问题。答案非常相似,但差异很重要:

awk '$0  ~ /^FILE NAME: / { if (count[$0]++ == 0) print; }
     $0 !~ /^FILE NAME: / {                       print; }'

我仍然假设您需要所有其他行—示例输出仅显示“文件名”行,但问题并没有涉及删除其他行。显然,如果不需要其他行,请删除awk脚本的第二行。

您可以在awk中使用关联数组,如果一行包含“文件名”,请检查它是否在数组中。如果是,就不要打印。如果不是,则将其保存在数组中并打印。对于不包含“文件名”的任何行,请打印它们。

请将代码和数据缩进4个空格;这样,连续行之间就不需要空行了。在标记编辑器中,“二进制”按钮(上面有“101010”符号)缩进选定的行。这不好,因为它还删除了文件名:/dirA/dirB/dirC/dirD/dirE/FILE line?是的,请给我举个例子