shell - 如何使用 shell 脚本附加到文件中不包含特定模式的行

标签 shell

我有一个平面文件如下:

11|aaa
11|bbb|NO|xxx
11|ccc
11|ddd|NO|yyy

对于不包含 的行|否| , 我想添加字符串 |是| 在末尾。所以我的文件应该是这样的:
11|aaa|YES|
11|bbb|NO|xxx
11|ccc|YES|
11|ddd|NO|yyy

我正在使用 AIX 和 sed -i 内联替换选项不可用。因此,目前我正在使用以下代码来执行此操作:
#Get the lines that do not contain |NO|
LINES=`grep -v "|NO|" file`

for i in LINES
do
    sed "/$i/{s/$/|YES|/;}" file > temp
    mv temp file
done

但是,上述工作是有效的,因为我的文件包含超过 40000 行,因此运行大约需要 3 个小时。我相信它花费了太多时间,因为它必须搜索每一行并写入临时文件。有没有更快的方法来实现这一目标?

最佳答案

这将很快:

sed '/NO/!s/$/|YES|/' filename

关于shell - 如何使用 shell 脚本附加到文件中不包含特定模式的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742487/

相关文章:

bash - Unix Shell 脚本 : Remove duplicates from line ignore blank lines

linux - 如何使用 shell 脚本 ping 一个文件中的多个 IP,并仅打印另一个文件中的在线 IP?

linux - 使用 SNMP 协议(protocol)通过 SNMP 命令运行脚本会给出不同的输出,因为脚本独立执行

linux - 从 shell 脚本中的 RTF 文件中提取信息

shell - jq:错误:test1/0 未在 <top-level>,第 1 行定义

android - Git 预提交钩子(Hook)运行 lint 检查?

linux - SED 解析时间戳之间的 apache 日志

linux - 如何在队列和后台运行异步命令?

python - 将 StdIn 重定向到 python manage.py shell 时从 StdIn 读取输入

linux - 如何在 Linux 中为每个输出行列出一个文件名?