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