
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
どの行でも、その行が行の先頭の変数と一致する場合に印刷します。