特定の要素を見つけるにはGrepを使用してください。

特定の要素を見つけるにはGrepを使用してください。

べたつきの状況に閉じ込められています。内容は次のようなファイルがあります。

3               2017-05-30      2017-09-29
2               2017-05-27      2017-08-26
1               2017-05-27      2017-08-26

ユーザーは、列1の値になるlabelNumを選択して日付を変更するように選択します。プロンプトに従ってユーザーが3を入力した場合。 2列を印刷したいです。

だから私は書いた。

cat temp.txt | grep $labelNum | awk '{print $2}'

3の場合、labelNum私が得た出力は次のようになります。2017-05-30

ただし、ユーザーがlabelNum2を入力すると、次のような結果が得られます。

2017-05-30
2017-05-27
2017-05-27

.txtファイルのどこでも「2」を探しているからです。しかし、私は列2が2になりたいですlabelNum2017-05-27

これを行う方法はありますか? grepの代わりにawkを試してみましたが、成功しませんでした。

ありがとうございます。

編集:行は動的であり、より多くの項目がテキストファイルに追加されると変更されることがあります。したがって、sedを使用してその行に移動することはできません。

答え1

シングルアッ:

awk -v lbl=$labelNum '$1 == lbl{ print $2 }' temp.txt

  • -v lbl=$labelNum- 変数値をlabelNumawkスクリプトに渡す

  • $1 == lbl- 最初の列の値が変数の値と等しい場合 - 次の式を実行します。

答え2

ソリューションを維持することもできます。

cat temp.txt | grep ^$labelNum | awk '{print $2}'

行の先頭で一致します。または

awk '/^'$labelNum'/{print $2}' temp.txt

同様に動作しますが、awkの内部から脱出するのは面倒です。

関連情報