如何打印第一个单词是文件第一个单词的所有行?

如何打印第一个单词是文件第一个单词的所有行?

我有一个文本文件sort.txt,其内容如下:

2 Jack
2 Naomi
2 Tina
1 John
1 Tyler

我想打印出以 开头的所有行2,但问题是数字可能并不总是为2,它可以是任何数字。我只想打印第一个单词与第一行相同的所有行。因此,如果第一个单词是3,则打印出以 开头的所有行3。我尝试这样做,但没有成功:

firstWord=awk '{print $1;}'
egrep "^$firstWord" sort.txt

答案1

这是相当微不足道的awk。获取变量中第一行的第一个单词,然后对于后续行,使用该变量来匹配第一个单词并仅打印这些行

awk 'NR == 1 { fw = $1 } $1 == fw' sort.txt

该构造NR == 1仅获取输入文件的第一行,并且每行中没有定义特殊的分隔符(空格分隔),第一个字段由 访问$1并存储到fw.后面的条件$1 == fw评估每一行,仅当满足条件时才返回 true,从而打印该行。

答案2

使用 awk:

awk 'NR == 1 { word=$1 } { if (match($0, "^"word) > 0) print }' < sort.txt

在第一行NR == 1,将“word”值指定为该行中的第一个单词。

word在任何行上,如果该行与行开头的变量匹配,则打印它。

相关内容