繁体   English   中英

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

[英]Get the last two letters of each line in a file using script shell

我有一个20行的.txt文件,很想获得每行的最后两个字母。 每行等于AA然后打印Good 如果不是,请打印Bad

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退出。

该脚本应与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)。

使用grep反向匹配来识别不以“ AA”结尾的行:

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

grepwc解决方案:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM