使用awk删除重复第一个字段的行
我有一个20多万行的文件。第一个字段是密钥ID。我需要删除2,3,4。。。重复第一个字段的行。救命啊!我快到最后期限了。我试过很多类似的问题,但都没有效果 这是你想要的吗使用awk删除重复第一个字段的行,awk,sed,Awk,Sed,我有一个20多万行的文件。第一个字段是密钥ID。我需要删除2,3,4。。。重复第一个字段的行。救命啊!我快到最后期限了。我试过很多类似的问题,但都没有效果 这是你想要的吗 print -- " 1 1 1 2 2 2 3 3 3 4" | awk '{ if (! ($1 in alreadyPrinted)) {print $1 ; alreadyPrinted[$1]=$1;}' 输出 1 2 3 4 如果没有,请花时间添加小样本输入,并根据该输入显示所需的输出。如果您编写了一些代码,请
print -- "
1
1
1
2
2
2
3
3
3
4" | awk '{ if (! ($1 in alreadyPrinted)) {print $1 ; alreadyPrinted[$1]=$1;}'
输出
1
2
3
4
如果没有,请花时间添加小样本输入,并根据该输入显示所需的输出。如果您编写了一些代码,请包含这些代码,并包含您收到的错误消息的确切文本
IHTH GNU代码:
$cat file.txt
第11111行
第2行22121
第11212行
线路22222
第11313行
线路2 22323
第11414行
第2行22424
第11515行
第2行22525
$sed-nr'1{h;s/\s*(\s+).*/\1/\x;p};1.{x;G;/(\S+)\n\1.*/!{S/\n.*/;x;p;b};S/\n.*/;x;d}'file.txt
第11111行
第2行22121
线路22222
线路2 22323
第2行22424
第2行22525
首先:为什么您的截止日期要求您使用
awk
?有什么要求你没有提到吗?第二:为了确保清楚你想要什么,请发布一些输入和输出示例。请发布示例!你的文件分类了吗?您只想删除重复的(基于列1的)行吗?问题必须表明对正在解决的问题的最低理解。告诉我们你试过做什么,为什么不起作用,以及它应该如何起作用。另请参见:。由于问题特别提到了第一个字段,因此在整个过程中使用$1
而不是$0
可能是有意义的。如果文件已排序,则只需要一个变量,而不是数组。最好是$1。不清楚数据是否已排序。我的极简主义解决方案旨在帮助O.P.将我们真正理解问题所需的东西形象化。谢谢大家,祝大家好运。
sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt
$cat file.txt
line1 11111
line2 22121
line1 11212
line2 22222
line1 11313
line2 22323
line1 11414
line2 22424
line1 11515
line2 22525
$sed -nr '1{h;s/\s*(\S+).*/\1/;x;p}; 1!{x;G;/(\S+)\n\1.*/!{s/\n.*//;x;p;b};s/\n.*//;x;d}' file.txt
line1 11111
line2 22121
line2 22222
line2 22323
line2 22424
line2 22525