21917


grepした結果のうち、特定の行のデータのみを取り出したいのですが  
うまくいかないので、原因を知りたいです。

元ファイル

[code]

          Lost River=70  Delta TDR-98 TDS  
          Lost River=75  Delta TDR-10 TDS  
          AW F=75  Delta TDR-20 TDS  
          Lost River=30  Delta TDR-97 TDS  
    
[/code]

スクリプト

[code]

    #!/bin/bash
    cat $1 |grep Delta | head -n 1 | tail -n 1 | tail -c 10
    cat $1 |grep Delta | head -n 2 | tail -n 1 | tail -c 10
    cat $1 |grep Delta | head -n 4 | tail -n 1 | tail -c 10
    
[/code]

出力したい値

[code]

    -98
    -10
    -97
    
[/code]

現在の出力

[code]

    -98-10-97
    
[/code]


CC BY-SA 3.0
2015-11-11T03:42:54.730
18651
2016-02-10T01:23:54.133
2015-11-11T09:27:24.807
7590
7590
question
bash
grepした結果のうち、特定の行のみ取り出す方法


grep ではなく awk を使ってみます。3番目にマッチする行以外を処理します。

[code]

    $ cat data.txt | awk -F '(TDR| TDS)' '/Delta/ && NR!=3{print $2}'
    -98
    -10
    -97
    
[/code]

**追記**

例えば、シェルスクリプトが以下の様になっていると、

[code]

    #!/bin/bash
    
    cat $1 |grep Delta | head -n 1 | tail -n 1 | tail -c 10 | head -c 3
    cat $1 |grep Delta | head -n 2 | tail -n 1 | tail -c 10 | head -c 3
    cat $1 |grep Delta | head -n 4 | tail -n 1 | tail -c 10 | head -c 3
    
    $ ./hoge.sh data.txt
    -98-10-97
    
[/code]

となります。もしかして実際のスクリプトには `| head -c 3` が入っているのではないでしょうか？


CC BY-SA 3.0
2015-11-11T04:35:45.897
18655
2015-11-11T16:02:39.953
2015-11-11T16:02:39.953
18651
answer


欲しいのは本当に行指定もしくは検出番号なのでしょうか？おそらく条件にマッチした行なのではないかと思います。間違ってたらすみません。ちなみにその場合、こういう処理は
grep よりも sed が向いてると思います。

[code]

    $ cat input | sed -n 's/^Lost\s\+River=[0-9]\+\s\+Delta\s\+TDR\(-[0-9]\+\).*/\1/p'
    -98
    -10
    -97
    
[/code]


CC BY-SA 3.0
2016-02-10T01:23:54.133
21917
2016-02-10T01:23:54.133
440
18651
answer