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>