我有一个平面文件如下:
11|aaa
11|bbb|NO|xxx
11|ccc
11|ddd|NO|yyy
对于不包含 | NO | 的行,我想在最后添加字符串 | YES | 。所以我的文件应该是这样的:
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个小时。我相信这需要花费很多时间,因为它必须搜索每一行并写入临时文件。有没有更快的方法来实现这一目标?
答案 0 :(得分:4)
这很快:
sed '/NO/!s/$/|YES|/' filename
答案 1 :(得分:2)
如果temp.txt是您的文件,请尝试:
awk '$0 !~ /NO/ {print $0 "|YES|"} $0 ~ /NO/ {print}' temp.txt
答案 2 :(得分:1)
简单awk
。将下面的代码放入脚本中并使用awk -f script file > temp
/\|NO\|/ { print; next; } # just print anything which contains |NO| and read next line
{ print $0 "|YES|"; } # For any other line (no pattern), print the line + |YES|
我不确定awk
regexps;如果它不起作用,请尝试删除第一个模式中的两个\
。