awk script
私は日付(6番目、7番目、8番目のフィールド)に基づいて生成された最も古い最新のファイルを印刷するために使用しています。
私のサンプルリストの日付形式は(YYYY / MM / DD)です。
file was created 2020/10/10 20:18:42 its name is output1
file was created on 2020/09/10 12:13:22 its name is foobar.awk
file was created on 2020/10/10 20:12:43 its name is output2
file was created on 2020/12/10 18:11:38 its name is foobar.bash
file was created on 2020/12/10 22:32:13 its name is output.txt
次のようにする必要があります。
Oldest file date :
2020/09/10 12:13:22
file name: foobar.awk
Newest file date :
2020/12/10 22:32:13
file name: output,txt
awk
注:「最も古いファイルと最新のファイルのみを印刷したい」のみ使用できます。
さらに:ファイルをソートせずに、最も古いファイルと最新のファイルのみを印刷します。
答え1
GNU awkを仮定すると:
gawk '
{created[$NF] = $5 " " $6}
END {
PROCINFO["sorted_in"] = "@val_str_asc"
for (f in created) {print "oldest:", f, created[f]; break}
PROCINFO["sorted_in"] = "@val_str_desc"
for (f in created) {print "newest:", f, created[f]; break}
}
' file
答え2
stat
ファイルと修正時間を取得するために使用され、awk
出力をソートしてフォーマットすることなく最小/最大を取得します。
stat -c "%Y %n" * | awk '
min == "" || min > $1 {min = $1; fmin = substr($0, index($0, FS)+1)}
max == "" || max < $1 {max = $1; fmax = substr($0, index($0, FS)+1)}
END {
form = "%Y/%m/%d %H:%M:%S"
printf "Oldest\nDate: %s\nFile: %s\n", strftime(form, min), fmin
printf "Newest\nDate: %s\nFile: %s\n", strftime(form, max), fmax
}'
出力例:
Oldest
Date: 2020/08/29 01:52:23
File: test.java
Newest
Date: 2020/10/12 06:52:21
File: test.sh
メモ:
- 上記のコードは、改行ではなくファイルのスペースを処理します。
- 私の考えでは、awk strftimeはGNUに固有のようです。