使用脚本外壳获取文件中每行的最后两个字母

时间:2019-07-17 19:10:37

标签: linux bash shell awk

我有一个.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/'

5 个答案:

答案 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)

使用grepwc的解决方案:

if [ "`grep -v 'AA$' your-file-here | wc -l`" == "0" ] ; then echo 'GOOD' ; else echo 'BAD' ; fi

grep命令检查所有不以AA结尾的行,而wc计算多少行。