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



我有一个 20 行的.txt文件,很想得到每行的最后两个字母。 它等于每行的 AA,然后打印。 如果没有,请打印"坏"。

line11111111111111111 AA
line22222222222222222 AA
line33333333333333333 AA
..................... 
line20202020202020202 AA

很好

====

============================
line11111111111111111 AB
line22222222222222222 AC
line33333333333333333 WD
..................... 
line20202020202020202 ZZ

这是巴德

这样做了,但需要改进:sed 's/^.*(.{2})/1/'

基于

您的文件布局

$ awk '$NF!="AA"{f=1; exit} END{print (f?"BAD":"GOOD")}' file

请注意,您不必在第一个非"AA"令牌之后检查其余部分。

您可以使用单个命令awk

awk 'substr($0, length()-1) != "AA"{exit 1}' file && echo "GOOD" || echo "BAD"

substr($0, length()-1)将提取每行的最后 2 个字符。 如果我们不在任何行中AA罚款,awk 命令将以 1 退出。

使用grep反转匹配来标识不以"AA"结尾的行:

if egrep -q -v AA$ input.txt; then echo "bad"; else echo "good";fi

这个脚本应该与 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 个 A(。

具有grepwc的解决方案:

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

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

最新更新