2017-12-28 66 views
-3

1日あたり約30000行のファイルを取得します。私はこれを1日の終わりまで毎時間受け取り、これを数時間に分けたいと思う。たとえば、次のようになります。Linuxでファイルを1日1時間に分割する方法

Hours file 
00-01  23 
01-02  230 
02-03  3453 

awkコマンドでは、ファイルを数えます。これは1日あたり約30000行です。ファイルの例は次のようなものです。

200 | 2003| mandi | 2017-12-27 09:20:21 | end 

ファイルには毎時30000行の異なる時間があります。これは時間に分割したい理由です。

「for」サイクルまたは「while」を使用して、これを数時間に分けてください。

+3

の例を追加してくださいあなたのサンプルファイルは、次のように私はそれを拡張して多くの使用ではありません入力ファイルの内容、使用しているコマンド、取得した出力、必要な出力 – Arount

+0

これは私のスクリプトですが、これはhours.cat * file201712127 *でない1日だけです。 grep -i name | wc -l – diamant123

+0

コードやデータをコメントに入れないでください。読みにくいです。代わりに、元の質問の下で「編集」をクリックし、すべてが自己完結して最新のものであることを確認してください。ありがとうございました。 –

答えて

1

あなたが実際に望むものはまだ明確ではありませんが、これは近いと思います。その後

200 | 2003| mandi | 2017-12-27 09:20:21 | end 
190 | 2007| mandi | 2017-12-27 10:20:21 | end 
190 | 2007| mandi | 2017-12-27 10:30:21 | end 
190 | 2007| mandi | 2017-12-27 10:31:21 | end 
190 | 2007| mandi | 2017-12-27 10:31:25 | end 
190 | 2007| mandi | 2017-12-27 23:31:25 | end 

を、次のように私はGNU awkを使用します:

awk -F'|' '{split($4,a,/[ :]/);hour=a[3]+0; lines[hour]++} 
    END{ for(h=0;h<24;h++)printf("%d-%d: %d\n",h,h+1,lines[h]) }' YourFile.csv 

サンプル出力

0-1: 0 
1-2: 0 
2-3: 0 
3-4: 0 
4-5: 0 
5-6: 0 
6-7: 0 
7-8: 0 
8-9: 0 
9-10: 1 
10-11: 4 
11-12: 0 
12-13: 0 
13-14: 0 
14-15: 0 
15-16: 0 
16-17: 0 
17-18: 0 
18-19: 0 
19-20: 0 
20-21: 0 
21-22: 0 
22-23: 0 
23-24: 1 
+0

こんにちは、私のファイルはCSVではありません。ターミナルファイルはこれとまったく同じですか? – diamant123

+0

私は理解できません - 「端末ファイル」*などはありません。テキストファイルとして扱う場合は、拡張子を 'txt'に変更してください。コンマでフィールドを区切りたい場合は、スクリプト内のコロンをカンマに変更します。何か他のものが必要な場合は、オリジナルの質問の下で '編集 'を時計回して質問が**入力データと出力データの両方を正しく表示するように変更してください。 –

関連する問題