首页 > 解决方案 > 删除bash中的重复字符串

问题描述

如何根据前一行中的字符串删除字符串?例如,我有以下内容:

This text is unique
TEXT A    
This is also unique
TEXT A    
Completely unique text here
TEXT B    
Some more unique text
TEXT C

我希望能够输出以下内容:

This is also unique
Completely unique text here
Some more unique text

希望从中我想做的是使用n+1th行上的文本来确定唯一性并打印行上的文本是有道理的nth

其选择TEXT A完全由输入命令的顺序决定。

当我只需要删除重复的 IP 地址时,我已经实现了与此类似的事情sort -uecho "$IP_ADDRESSES" | sort -u.

标签: bash

解决方案


使用任意字符串作为具有摊销常数时间查找的键的适当工具(因此您可以跟踪您以前见过的那些)是关联数组。

#!/usr/bin/env bash
case $BASH_VERSION in ''|[123].*) echo "ERROR: Bash 4.0 required" >&2; exit 1;; esac

declare -A seen_labels=( )  # initialize an empty associative array
while IFS= read -r str && IFS= read -r label; do # read string/label pair
  [[ ${seen_labels[$label]} ]] && continue       # skip pair if label prev. seen
  seen_labels[$label]=1                          # flag label as seen
  printf '%s\n' "$str"                           # print string
done

在https://ideone.com/zubTWi上查看此操作


推荐阅读