bash - 删除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 -u
:echo "$IP_ADDRESSES" | sort -u
.
解决方案
使用任意字符串作为具有摊销常数时间查找的键的适当工具(因此您可以跟踪您以前见过的那些)是关联数组。
#!/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
推荐阅读
- c# - 当 signalR 电路异常中断时,服务器端 Blazor 用户注销
- javascript - 如何在javascript中执行递归方法
- java - 尝试使用 Maven 程序集插件时出现“程序集配置错误:null”
- sql - 事务中的 SQL IF 语句
- reactjs - 如何通过在 Rect 中添加所有项目字段来设置购物车小计
- java - 为什么 Eclipse 在创建新的 Maven 项目时没有为我创建“scr/main/java”和“src/main/webapp”文件夹?
- javascript - 用three.js绘制切边
- javascript - react-router 中的嵌套组件未呈现
- reactjs - 如何检测是否设置了 react-router?
- c# - 在 shadow DOM 中使用页面对象模式选择器的最佳实践