我有一个文本文件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
在任何行上,如果该行与行开头的变量匹配,则打印它。