テキスト処理:文字列で区切られた日付でリストを並べ替える方法

テキスト処理:文字列で区切られた日付でリストを並べ替える方法

file.txt日付で内容を並べ替えたいです。ソートする日付は、4番目のテーブルデータ<td></td>ラベルにあります。

たとえば、内容は次のとおりですfile.txt

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>

希望の出力:どうすればいいですか?

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

コマンドを使用しましたが、sort動作しません。

cat file.txt 2> /dev/null | sort -t'>' -k9n -k9.4M -k9.7n

編集する:この参照リンクを見つけましたが、まだ機能していません。 https://stackoverflow.com/a/16060031/7842707

ベストアンサー1

<tr>各項目が別々の行にある場合:

awk+sort解決策:

awk -F'[<>]' '{ print $(NF-4), $0 }' file.txt | sort -k1,1n -k1.5M | cut -d' ' -f2-
  • -F'[<>]'<- と>フィールド区切り記号として処理
  • $(NF-4)- 各行の最後の<td>タグ値を含めます(例:)。2017Jan31これはソートキーとして使用されます。
  • -k1,1n- 最初のフィールドに基づいて数値順に並べ替え(例:日付、年に基づく)
  • -k1.5M- 日付と月は5番目の文字からソートされます。
  • cut -d' ' -f2-- 補助ソートキーの削除(最初のフィールド)

出力:

<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Jan31</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2017Dec25</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Mar01</td></tr>
<tr><td>some_name_here</td><td>number_code_here</td><td>2018Mar31</td><td>2018Apr02</td></tr>

おすすめ記事