ある列で値を検索し、別の列からその値を印刷します。

ある列で値を検索し、別の列からその値を印刷します。

値を含むテキストファイルがあります。

1 Peter
2 Paul

2番目の列(Paulなど)をパラメータ値として使用し、最初の列(2)の対応する値を返すコマンド/スクリプトが必要です。

whileループを使用しようとするのに必要な値をどのように見つけますか?

while IFS= read -a line; do      
  printf "%s\n" "${line[@]}"     
done < "file.txt"

答え1

GNU grepを使用してください:

grep -Po ".* (?=Paul)" file

出力:

2

またはbashを使用してください。

while read -r num name; do
  [[ $name == "Paul" ]] && printf "%s\n" "$num"
done < file

答え2

awkこの場合に便利です。

$ awk '$2 == "Paul" {print $1}' input.txt
2

またはインタラクティブに:

$ awk 'BEGIN{printf "Name: "; getline name < "-"} $2 == name {print $1}' input.txt
Name: Paul
2

答え3

最初にgrepしてから、次の値を読み取ることができます。

grep -w Paul file.txt | while read v k; do echo $v; done

Paulそれが最後の列であることがわかっている場合はを使用してくださいPaul$

関連情報