-5

入力

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
4

2 に答える 2

1
$ 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
于 2013-07-29T14:22:20.437 に答える
1

このワンライナー(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.
于 2013-07-29T10:58:37.970 に答える