我必须过滤多行数据并在1-49位字符中查找重复项。接下来的第一个重复项留在那里,否则重复项将被删除。 脚本必须在外壳脚本中。我读过有关uniq的sort的信息,但找不到正确的示例。
应删除从1到49个字符的重复行,并仅首先保存。 在示例行中:ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24被重复4次,并且仅从第1行开始保存。
我有以下示例:
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 1
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 2
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 4
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 5
输出应为:
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
答案 0 :(得分:1)
如果您不介意首先对数据进行排序,可以使用sort
和awk
的组合。在一组匹配的行中,这将对数据进行排序后打印第一行,而不一定是原始文件中的第一行。
sort inputfile |awk 'BEGIN { last = ""; }
{ pattern = substr($0,1,48); if(pattern != last) print; last = pattern; }'
注意:我使用substr($0,1,48)
来获得48个字符,因为在您的示例中,我只计算了48个粗体字符。
使用输入
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z242
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z244
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z245
我得到结果
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241