入力
a 1 20
4 50
b 5 20
2 90
r 5 70
ここで、3 列目と 1 列目のそれぞれの文字から >=50 の情報を取得したいと考えています。
出力
a 4 50
b 2 90
r 5 70
$ cat file
a 1 20
4 50
b 5 20
2 90
r 5 70
$ awk 'BEGIN{FS=OFS="\t"} {if ($1=="") $1=k; else k=$1} $NF>50' file
b 2 90
r 5 70
$ awk 'BEGIN{FS=OFS="\t"} {if ($1=="") $1=k; else k=$1} $NF>=50' file
a 4 50
b 2 90
r 5 70
このワンライナー(awk)を試してください:
awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' file
あなたのファイルで:
kent$ cat f
a 1 20
4 50
b 5 20
2 90
r 5 70
kent$ awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' f
a 4 50
b 2 90
r 5 70
編集
$1!=" "{k=$1} if $1 is not " ", assign $1 to var k
$NF<50{next} if the last col ($NF) < 50, stop processing, read next line
$1=k otherwise, assign k to $1, and print the line.