我想删除所有第二列05408736032都相同的行
0009300|05408736032|89|01|001|0|0|0|1|NNNNNNYNNNNNNNNN|asdf| 0009367|05408736032|89|01|001|0|0|0|1|NNNNNNYNNNNNNNNN|adff|
这些行不是连续的。删除所有行是很好的。我不需要把他们中的任何一个留在身边。
对不起,我的unix fu由于不使用而变得很弱:)。
发布于 2009-09-17 17:37:27
如果列的宽度不固定,您仍然可以使用排序:
sort -t '|' --key=10,10 -g FILENAME-t标志将设置分隔符。-g仅用于自然数字排序。发布于 2009-09-17 16:25:24
如果所有输入数据的格式都是如上所述-即固定大小的字段-并且输出中行的顺序并不重要,那么sort --key=8,19 --unique应该可以做到这一点。如果顺序很重要,但重复行始终是连续的,则uniq -s 8 -w 11将起作用。如果字段不是固定宽度的,但重复行始终是连续的,则Pax的awk脚本将起作用。不过,在最一般的情况下,对于一行程序来说,我们可能会看到一些稍微复杂的东西。
发布于 2009-09-17 16:23:33
假设它们是连续的,并且您想要删除后续的,下面的awk脚本将执行此操作:
awk -F'|' 'NR==1 {print;x=$2} NR>1 {if ($2 != x) {print;x=$2}}'它的工作方式是打印第一行并存储第二列。然后,对于后续行,它跳过存储值与第二列相同的行(如果不同,则打印该行并更新存储值)。
如果它们不是连续的,我会选择Perl解决方案,其中您维护一个关联数组来检测和删除重复项-我会编写它,但我的3yo女儿刚刚醒来,现在是午夜,她着凉了-明天见,如果我能挺过晚上的话:-)
https://stackoverflow.com/questions/1439816
复制相似问题