Bash 选择两列值一致的行

Bash 选择两列值一致的行,bash,perl,awk,sed,Bash,Perl,Awk,Sed,如果我有以下资料: 1 5 a 2 5 a 3 5 a 4 5 a 5 5 a 6 5 a 1 3 b 2 3 b 3 3 b 4 3 b 5 3 b 6 3 b 如何仅选择两列值相同的行,即 5 5 a 3 3 b 在bash/awk/sed中 我知道如何使用awk选择具有特定值的行,但仅当我指定了值时。只需说: $ awk '$1==$2' file 5 5 a 3 3 b 如您所见,当条件$1==$2完成时,awk自动打印行。为了完整性: perl -ane 'print if $F

如果我有以下资料:

1 5 a
2 5 a
3 5 a
4 5 a
5 5 a
6 5 a
1 3 b
2 3 b
3 3 b
4 3 b
5 3 b
6 3 b
如何仅选择两列值相同的行,即

5 5 a
3 3 b
在bash/awk/sed中

我知道如何使用awk选择具有特定值的行,但仅当我指定了值时。

只需说:

$ awk '$1==$2' file
5 5 a
3 3 b
如您所见,当条件
$1==$2
完成时,
awk
自动打印行。

为了完整性:

perl -ane 'print if $F[0] == $F[1]' file
猛击

这可能适合您(GNU grep):


它只是数值吗?是的,它只是数字。你让我看起来很傻。谢谢请作为答案发布,我会接受。我很惊讶看到这样的问题的答案是如何获得这么多选票的。简单的回答也意味着更多的眼睛。这也意味着“正确”的答案是显而易见的。@Sobrique嗯,这不是“哦,多么聪明的答案,我从来没有想过”而是-对我来说-“啊,是的,就是这样”。但是当然,投票总是受欢迎的:)可能更好的是
=
版本,尽管OP提到它应该只包含数字。
while read first second rest; do
    [[ $first -eq $second ]] && echo "$first $second $rest"
done < fi
while read first second rest; do
    [[ $first == $second ]] && echo "$first $second $rest"
done < file
sed -En '/^([^ ]+) \1 /p' file
grep '^\(\S\+\)\s\+\1\s\+' file