ファイルに基づいてソートしたいです。
- テキスト今後最初のカンマ、そして
YYYYMMMDD
サンプル入力の日付に基づいてセカンダリソートを実行したいと思います。
入力例:
AX,NO,NO,\PathAX/subj/defn/some-file-name-20151229.txt,
CXX,NO,NO,\PathCXX/subj/defn/some-file-name-20151229.txt,
CXX,YES,YES,\Path/subj/defn/some-file-20140503.txt,6
DY,YES,MAYBE,\PathDY/subj/defn/some-file-name-20140720.txt,6
最初の部分はで解くことができますがsort -t, -k1,1
、2番目の部分はファイル名のダッシュ数が固定されていないため、毎日どのようにすればよいかわかりません。したがって、-
区切り文字を使用して列番号を指定することはできません。
希望の出力:
AX,NO,NO,\PathAX/subj/categ/some-file-name-20151229.txt,
CXX,YES,YES,\Path/subj/categ/some-file-20140503.txt,6
CXX,NO,NO,\PathCXX/subj/categ/some-file-name-20151229.txt,
DY,YES,MAYBE,\PathDY/subj/categ/some-file-name-20140720.txt,6
メモ:
私はそれが役に立つと思います:
- 次
YYYYMMDD
は最後ファイル名とファイル拡張子の前にダッシュがあります。 - 前のダッシュは
YYYYMMDD
常に存在するため、ダッシュが1つ以上あります。 - ファイル拡張子以外のファイルには他に何もありません。
最後の文字をファイルに表示されない他の文字に置き換えてから、並べ替えてダッシュに置き換える2段階のプロセスを考えることができますが、-
より簡単な方法があるかどうか疑問に思います。
プラットフォーム:
- アップルシステム 10.9.5
ベストアンサー1
そのような問題を解決するための一般的なアプローチ(次のように説明できない問題の場合)窒素1行目は、ソートキーを前に追加してからソートし、ソートキーを削除するように行を再構築することです。 sedやawkなどのより柔軟なツールを使用してソートキーを決定できます。
日付を正確にどのように決定するのかわかりません。行の最後の8桁のシーケンスを選択し、必要に応じて調整します。
sed 's/.*\([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)/\1,&/; t; s/^/,/' |
sort -t, -k2,2 -k1,1 |
cut -d, -f 2-
行に8桁のシーケンスが含まれていない場合、sedスクリプトのビットはt; s/^/,/
前にコンマを追加します。それ以外の場合は、最後のステップでカンマ区切りの最初のフィールドを削除します。