如何仅列出文本文件中的奇数?

如何仅列出文本文件中的奇数?

我在 Linux 中有一个包含 2 列的文件,第一列有 IP 地址,第二列有端口号

我只想列出带有 IP 地址的奇数端口号

答案1

下面awk一行只需一个命令即可获得结果:

awk '$2%2!=0 {print $0}'  file.txt

由于您需要显示奇数端口号及其各自的 IP 地址,因此只需将第 2 列数字除以 2 即可;如果结果不等于零,则打印该行。

答案2

假设您的文件是制表符分隔的 (tsv)

cut -f 2 abcd.txt | egrep '[13579]$'

应该可以解决问题。

如果您使用不同的分隔符甚至固定宽度,请参阅man cut(特别是-d-c选项)

奖励:添加| uniq以删除重复项


编辑:cut如果您不想删除 IP 地址,请忽略该部分:egrep '[13579]$' abcd.txt


编辑:添加一些解释

cut是一个逐行操作的实用程序,并允许选择您想要输出的行的哪些部分。

您可以使用 选项 按字符位置指定-c(对于固定长度字段有用)或使用 字段指定-f(如果您的数据是字段分隔的)。

如果使用-f字段分隔符,则假定为 字符,或者您可以使用 指定不同的字符-d

echo -e 'abcdefghij\nabcdefghij' # two lines
echo -e 'abcdefghij\nabcdefghij' | cut -c 2-4,7 # selects characters from position 2 to 4 and 7

echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' # space-delimited fields
echo -e 'aa,bb,cc,dd\nAA,BB,CC,DD' | cut -d , -f 3 # prints only the 3rd field

egrep(与 相同grep -e)选择与给定匹配的行正则表达式。表达式的[13579]$意思是行尾有奇数位,因此egrep仅显示以奇数结尾的行。

正则表达式在操作文本时非常漂亮且有用,因此您会在许多命令行实用程序、文本编辑器和编程语言中找到它们 - 它们一开始可能显得很神秘,但实际上不需要成为专家大多数任务,如果您阅读一些有关该主题的内容(并进行实验!),您将很快掌握其要点。


编辑:根据 @HaukeLaging 建议替换(1|3|5|7|9)$[13579]$

相关内容