[英]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
用grep
和wc
解决方案:
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.