我有一个.txt文件,其中有 20 行,并且希望获取每行的最后两个字母。每行等于 AA ,然后打印 Good 。如果没有,请打印 Bad 。
line11111111111111111 AA
line22222222222222222 AA
line33333333333333333 AA
.....................
line20202020202020202 AA
这是好。
==========================
line11111111111111111 AB
line22222222222222222 AC
line33333333333333333 WD
.....................
line20202020202020202 ZZ
这是坏。
做到了这一点,但需要改进:sed 's/^.*\(.\{2\}\)/\1/'
答案 0 :(得分:2)
根据您的文件布局
$ awk '$NF!="AA"{f=1; exit} END{print (f?"BAD":"GOOD")}' file
请注意,您不必检查第一个非“ AA”令牌之后的其余部分。
答案 1 :(得分:1)
您可以使用单个命令awk
:
awk 'substr($0, length()-1) != "AA"{exit 1}' file && echo "GOOD" || echo "BAD"
substr($0, length()-1)
将提取每行的最后2个字符。如果我们未在任何行中对1
进行罚款,则awk命令将以AA
退出。
答案 2 :(得分:0)
此脚本应与awk一起使用。对于我来说,txt文件的名称为 .test ,您可以使用文件名对其进行更改。
if [ "$(awk '{ print $2 }' .test | uniq)" = "AA" ]; then
echo "This is GOOD";
else echo "This is BAD";
fi
工作方式:
首先,使用awk通过awk '{ print $2 }'
获取第二列,并使用uniq
命令从每一行中获取唯一的条目。如果所有行均为AA uniq,则仅使它成为1行。最后,我们检查最后一个产品是否仅为“ AA”(1行字符串和2 As)。
答案 3 :(得分:0)
使用grep
反向匹配来识别不以“ AA”结尾的行:
if egrep -q -v AA$ input.txt; then echo "bad"; else echo "good";fi
答案 4 :(得分:-1)
使用grep
和wc
的解决方案:
if [ "`grep -v 'AA$' your-file-here | wc -l`" == "0" ] ; then echo 'GOOD' ; else echo 'BAD' ; fi
grep
命令检查所有不以AA
结尾的行,而wc
计算多少行。