3

'|'のファイルがあります 区切られます。ファイル内のフィールドの1つはタイムスタンプです。フィールドの形式は次のとおりですMM-dd-yyyy HH:mm:ss。ファイルに一意の日付を印刷できるようにしたい。cutコマンド(cut -f1 -d'|' _file_name_ |sort|uniq)を使用して、一意の日付を抽出できます。ただし、フィールドの時間部分では、何百もの結果が表示されます。cutコマンドを実行した後、最初の11文字のサブストリングを取得して、一意の日付を表示したいと思います。次のようなawkコマンドを使用してみました。 awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_

運が悪い。私はこれを間違った方法で行っていますか?必要なデータを抽出するもっと簡単な方法はありますか?どんな助けでもいただければ幸いです。

4

3 に答える 3

5

cut -c1-11各入力行の文字1〜11が表示されます。

于 2011-03-28T16:14:37.107 に答える
4

日付がファイルの最初の(スペースで区切られた)フィールドである場合、一意の日付のリストは次のようになります。

cut -f1 -d' ' filename | sort -u

更新:@shellterの正解に加えて、他のawk機能を示すための代替案を紹介します。

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename
于 2011-03-28T16:20:00.893 に答える
3

あなたはすべてそこにいます。これは、日付のタイムスタンプがフィールド1にあるという考えに基づいています。

編集:フィールドを10に変更し、uniqでプロセスを分離する代わりに-uオプションを使用してソートしました

あなたはカットを必要としません、awkはあなたのためにそれをします。

awk -F"|" ' { print substr($10,1,11) }'  _file_name_ |sort -u > _output_file_

これがお役に立てば幸いです。

PSは、新しいユーザーのように見えます。役立つ回答が得られた場合は、それを承認済みとしてマークすることを忘れないでください。または、有用な回答として+(または-)を付けてください。

于 2011-03-28T16:20:18.913 に答える