49459


csvファイルに対してcutコマンドを使い、必要な列は切り出して  
パイプでsedに渡した後の処理についての質問です。

sed以外でも簡単に実現可能なら、それでも大丈夫です。

下記のようなcsvファイルがあります。

1 boa usa 100  
2 soo usa -100  
3 soo usa 50  
4 boa usa -100

boaかつusaの場合で、数値がマイナスの行だけ抽出する  
sooかつusaの場合で、数値がプラス（マイナスなし）の行だけ抽出する

数値以外の項目は完全一致にしたいです。  
usaaaや、boaboaなどの文字列を含む行があるので、それは  
抽出したくありません。  
数値はマイナスが付くか、付かないかの2種類となります。  
よろしくお願い致します。


CC BY-SA 4.0
2018-10-19T08:03:54.843
49449
2018-10-23T18:09:57.357
25524
question
sed
sedによる数値の抽出について


私なら **awk** を使います。CSVから必要な列だけcutで取り出した結果を処理対象として…

  * boaかつusaの場合で、数値がマイナスの行だけ
[code]     $ awk '{ if($2 == "boa" && $3 == "usa" && $4 < 0) print $0 }'

    
[/code]

  * sooかつusaの場合で、数値がプラス（マイナスなし）の行だけ
[code]     $ awk '{ if($2 == "soo" && $3 == "usa" && $4 > 0) print $0 }'

    
[/code]

空白区切りで1列目の値が`$1`、2列目の値が`$2`…と続き、行全体は`$0`で参照します。

(前回の質問でも説明しましたが、`sed`は基本的に文字列の「置換」を行うコマンドです)


CC BY-SA 4.0
2018-10-19T12:15:45.830
49459
2018-10-21T16:22:57.253
2018-10-21T16:22:57.253
3060
3060
49449
answer


必ず4列で数値にイレギュラーがないなら、sed でも労せず実現できます。

[code]

    sed '-e / boa usa -[0-9]/p;/ soo usa [0-9]/p;d'
    
[/code]


CC BY-SA 4.0
2018-10-23T18:09:57.357
49587
2018-10-23T18:09:57.357
8431
49449
answer