如果最后一个字符是奇数则打印字符串

如果最后一个字符是奇数则打印字符串

我的文件中有一个主机名列表,并希望根据最后一个字符将它们分开。如果最后一个字符是奇数,则将主机名写入文件。我怎样才能在一个衬里中做到这一点?

例子:

abc123
abc124
abc348
abc435

期望的输出:

abc123
abc435

答案1

短的awk命令:

awk '/[13579]$/' file > hostnames_odd.txt
  • [13579]- 表示允许数字(奇数)列表的字符类
  • $- 字符串/行的结尾

结果:

$ cat hostnames_odd.txt 
abc123
abc435

或者与grep:

grep '[13579]$' file  > hostnames_odd.txt

如果某些行末尾可能有空格,则将关键模式更改为以下内容:[13579][[:space:]]*$

答案2

这里有一个棘手的技巧:只是将字段分隔符设置为空字符串,这样每个字符都是一个字段。这样,您只需检查$NF是偶数还是奇数:

$ awk -F "" '$NF % 2' file
abc123
abc435

与其他数据:

$ echo "23
... 24
... 25" | awk -F "" '$NF % 2'
23
25

答案3

如果最后一个字符 mod 2 不为零,这将打印出读入的行。

perl -wlne 'print $_ if ((substr $_, -1) % 2)' /path/to/file

相关内容