Solaris + sort コマンドで日付と時刻に従ってファイルをソートする

Solaris + sort コマンドで日付と時刻に従ってファイルをソートする

Solarisマシンのスクリプトから/var/tmp/file.txtに作成された長いリストがあります。次のリストには4つのフィールドがあります。

次のタイムスタンプに従ってリストをソートする方法を教えてください (sort コマンドまたは awk や sed などの他の Solaris コマンドを使用)

たとえば、日付と時刻 15-10-2009 08:29:18 は 15-10-2009 08:29:10 より前である必要があります... など

file.txt の例 (ソートされていないファイル)

  PHONE_NUMBER         TIMESTAMP                   ID  TYPE
  -------------------- -------------------        ---- -------------- 
  972544111222         15-10-2009 08:29:18         20  sharp_gx10
  33633333333          24-09-2009 16:17:45         20  other_mm_phone
  841990000043         08-10-2009 09:04:38         60  other_mm_phone
  972541230001         08-10-2009 14:23:48         20  other_mm_phone

答え1

コメントで述べたように、タイムスタンプの形式により私のアプローチは複雑に見えますが、ほとんどはメカニクスの繰り返しです。

awk 'NR>2 {print $1"-"$2"-"$3"-"$4"-"$5}' file.txt |\
awk -F'-' '{print $4"-"$3"-"$2"-"$5"-"$1"-"$6"-"$7}' |\
sort |\
awk -F'-' '{print $5"\t"$1"-"$2"-"$3" "$4"\t"$6"\t"$7}'
  1. 最初の 2 行 (ヘッダーのみ) をスキップし、残りの行を単一の区切り文字 (この場合はダッシュ、最後のフィールドにはダッシュが表示されないように注意してください) を使用するように変換します (元々は日付形式のため、空白とダッシュが交互に使用されます)。
  2. フィールドをダッシュ​​で分割し、日付を行の先頭に移動し( での使用を容易にするためsort)、降順で印刷します。
  3. 並べ替えと
  4. 入力と同様の形式で情報を出力します (交換し$1$3古い日付形式を取得します)。

必要であれば、後でヘッダー行を再度追加します。


編集: 逆順に並べ替えたいとのことでした。sortに変更するだけですsort -r

関連情報