同じ値を持つ行の選択に問題があります。私のデータが大きすぎて、これを行ごとに実行できません。これを実行できるスクリプトを教えてください。
私のデータは次のとおりです。
ファイル名:temp
Start day hour end day hour Value
01/04/2000 22:00 01/05/2000 09:00 -9
01/05/2000 09:00 01/06/2000 09:00 -9
01/06/2000 09:00 01/07/2000 09:00 -9
01/07/2000 09:00 01/08/2000 09:00 -9
01/08/2000 09:00 01/09/2000 09:00 -9
01/09/2000 09:00 01/10/2000 09:00 -9
01/10/2000 09:00 01/11/2000 09:00 -9
01/11/2000 09:00 01/11/2000 21:30 -9
01/11/2000 22:30 01/12/2000 09:00 -9
01/12/2000 09:00 01/13/2000 09:00 -9
01/15/2000 09:00 01/16/2000 09:00 -9
01/16/2000 09:00 01/17/2000 09:00 -9
01/17/2000 09:00 01/18/2000 09:00 -9
01/18/2000 09:00 01/18/2000 22:45 -9
01/18/2000 22:50 01/19/2000 09:00 0.15
01/19/2000 09:00 01/20/2000 09:00 -9
01/20/2000 09:00 01/21/2000 09:00 -9
01/21/2000 09:00 01/22/2000 09:00 -9
01/22/2000 09:00 01/23/2000 09:00 -9
01/23/2000 09:00 01/24/2000 09:00 -9
01/24/2000 09:00 01/25/2000 09:00 -9
01/25/2000 09:00 01/26/2000 00:35 -9
01/26/2000 00:35 01/26/2000 09:00 -9
01/26/2000 09:00 01/27/2000 09:00 -9
たとえば、上記の2000年1月18日は、「開始日」として2回、「終了日」として2回表示されます。だから、01/18/2000
「開始日」または「終了日」の行を含めたいと思います。
上記データの出力は以下の通りです。
Start day hour end day hour Value
01/10/2000 09:00 01/11/2000 09:00 -9
01/11/2000 09:00 01/11/2000 21:30 -9
01/11/2000 22:30 01/12/2000 09:00 -9
01/17/2000 09:00 01/18/2000 09:00 -9
01/18/2000 09:00 01/18/2000 22:45 -9
01/18/2000 22:50 01/19/2000 09:00 0.15
01/25/2000 09:00 01/26/2000 00:35 -9
01/26/2000 00:35 01/26/2000 09:00 -9
01/26/2000 09:00 01/27/2000 09:00 -9
ベストアンサー1
私が正しく理解したら、開始日または終了日が繰り返される行が欲しいでしょう。これにより、次のようになります。
awk 'NR==FNR{s[$1]++;e[$3]++;next}
FNR == 1 || s[$1]>1 || e[$3]>1' temp temp
これはファイルに2つのパスを作成することです。最初のパスでは開始日と終了日の発生回数を計算し、2番目のパスでは開始日または終了日の発生回数が1より大きい行を出力します。