我在 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]$