ファイルが生成された時間+日付でgrep出力をソートする方法は?

ファイルが生成された時間+日付でgrep出力をソートする方法は?

このコマンドを実行すると

grep _rlnAveragePmax *model*

私は次のような結果を得ます。

run_ct6_it006_model.star:_rlnAveragePmax                             0.153500
run_ct6_it007_model.star:_rlnAveragePmax                             0.096772
run_it000_model.star:_rlnAveragePmax                             0.000000
run_it001_model.star:_rlnAveragePmax                             0.008995
run_it002_model.star:_rlnAveragePmax                         2.517429e-04
run_it003_model.star:_rlnAveragePmax                             0.003727
run_it004_model.star:_rlnAveragePmax                             0.056681
run_it005_model.star:_rlnAveragePmax                             0.109754
run_it006_model.star:_rlnAveragePmax                             0.153500

ただし、上記の出力はアルファベット順にソートされます。生成時間+日付に基づいてソートした場合、出力は次のようになります。

run_it000_model.star:_rlnAveragePmax                             0.000000
run_it001_model.star:_rlnAveragePmax                             0.008995
run_it002_model.star:_rlnAveragePmax                         2.517429e-04
run_it003_model.star:_rlnAveragePmax                             0.003727
run_it004_model.star:_rlnAveragePmax                             0.056681
run_it005_model.star:_rlnAveragePmax                             0.109754
run_it006_model.star:_rlnAveragePmax                             0.153500
run_ct6_it006_model.star:_rlnAveragePmax                             0.153500
run_ct6_it007_model.star:_rlnAveragePmax                             0.096772

生成時間+日付で出力をソートするには、grepコマンドで何をすべきですか?

答え1

macOSを実行しない限り、ファイル作成日は保存されません。ファイルを編集すると、通常は古いバージョンを置き換える新しいファイルが生成されるため、概念は明確に定義されていません。記録された日付は、ファイルが最後に変更された日付です(初期作成およびその後の編集を含む)。

修正時間でファイルをソートする最も簡単な方法は、次のように実行することです。扱いにくい(bash、ksh、またはFishなどの強力な他のシェルとは対照的です)zshで使用できますグローバル予選たとえば、Om変更時刻に基づいてファイルを並べ替えます(最も古いもの、Om最も若いものから)。

grep _rlnAveragePmax *model*(Om)

grepファイルはコマンドラインで指定された順序でナビゲートされるため、必要な結果が得られます。

答え2

最初に時間の整ったlsを実行し、次に-Hフラグを使用してxargsを介してstdoutをgrepにパイプしてファイル名を含めます(これは1つのファイルに対してのみ行われるため、デフォルトではファイル名は含まれません)。

ls以降の最初のgrepではディレクトリが除外されます(提供された例ではこれが再帰検索ではないと思います)。 lsの後の2番目のgrep、ファイル名のフィルタリング(xargsを除く)

ls -tpQ --quoting-style=shell | grep -v / | grep model | xargs -i grep -H _rlnAveragePmax {}

ワイルドカードの貴重な説明の後の更新:ファイル名に奇妙な文字を含めることができるすべてのケースを説明するために、inode番号がlsから抽出され、inode番号の一致とgrepコマンドのために「find」にパイプされます。 xargsコマンドは2つの{}を区別できないため、xargsは "while read line"に置き換えられました。

シンボリックリンクに従い、ディレクトリなどは含まず、ファイルのみを含めます。この場合、最大深度パラメータは重複しますが(ファイルのみを残して)、パラメータを変更して再帰検索も可能にしました。

ls -ti | cut -d " " -f1 | while read line; do find -L . -maxdepth 1 -type f -inum $line -exec grep -H xxx {} \; ; done

関連情報