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}'
- 最初の 2 行 (ヘッダーのみ) をスキップし、残りの行を単一の区切り文字 (この場合はダッシュ、最後のフィールドにはダッシュが表示されないように注意してください) を使用するように変換します (元々は日付形式のため、空白とダッシュが交互に使用されます)。
- フィールドをダッシュで分割し、日付を行の先頭に移動し( での使用を容易にするため
sort
)、降順で印刷します。 - 並べ替えと
- 入力と同様の形式で情報を出力します (交換し
$1
て$3
古い日付形式を取得します)。
必要であれば、後でヘッダー行を再度追加します。
編集: 逆順に並べ替えたいとのことでした。sort
に変更するだけですsort -r
。