4

各日付に作成されたファイルの数を報告しようとしています。私はこの小さなワンライナーでそれを行うことができます:

ls -la foo*.bar|awk '{print $7, $6}'|sort|uniq -c

日付ごとに作成された fooxxx.bar ファイルの数のリストを取得しますが、月の形式は次のとおりです。Aaa (つまり: Apr) and I want xx (つまり: 04)。

私は答えがここにあると感じています:

awk '
BEGIN{
   m=split("Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec",d,"|")
   for(o=1;o<=m;o++){
      months[d[o]]=sprintf("%02d",o)
    }
format = "%m/%d/%Y %H:%M"
}
{
split($4,time,":")
date = (strftime("%Y") " " months[$2] " " $3 " " time[1] " " time[2] " 0")
print strftime(format, mktime(date))
}'

しかし、何を取り除く必要があるのか​​ ほとんどわからず、Aprを04に変換するために、これから切り出したものに7ドルを渡す方法もわかりません.

ありがとう!

4

5 に答える 5

15

awk で月の省略名を数値に変換する慣用的な方法を次に示します。

$ echo "Feb" | awk '{printf "%02d\n",(index("JanFebMarAprMayJunJulAugSepOctNovDec",$0)+2)/3}'
02

$ echo "May" | awk '{printf "%02d\n",(index("JanFebMarAprMayJunJulAugSepOctNovDec",$0)+2)/3}'
05

問題を解決するためにさらに情報が必要な場合はお知らせください。

于 2012-10-27T05:19:09.453 に答える
1

月の名前が月の列にのみ表示されると仮定すると、次のようにすることができます。

ls -la foo*.bar|awk '{sub(/Jan/,"01");sub(/Feb/,"02");print $7, $6}'|sort|uniq -c
于 2012-10-26T20:04:37.717 に答える
0

月のフィールド番号をmonths配列のインデックスとして使用するだけです。

print months[$6]

出力はシステムごとに異なり、lsファイルの経過時間に応じて同じシステム上でも異なる場合があり、例を挙げていないため、さらにガイドする方法を知る方法がありません.

ああ、解析しないlsでください。

于 2012-04-11T17:31:31.080 に答える
0

AIX istat を解析するには、次を使用します。

istat .profile | grep "^Last modified" | read dummy dummy dummy  mon day time dummy yr dummy
echo "M: $mon D: $day T: $time Y: $yr"
-> Month: Mar Day: 12 Time: 12:05:36 Year: 2012

AIX istat の月を解析するには、次の 2 行の AIX 6.1 ksh 88 を使用します。

monstr="???JanFebMarAprMayJunJulAugSepOctNovDec???"
mon="Oct" ; hugo=${monstr%${mon}*} ; hugolen=${#hugo} ; let hugol=hugolen/3 ; echo "Month: $hugol"
-> Month: 10

1..12 : 月名OK

lt 1 または gt 12 の場合: 月の名前が正しくありません

"hugo" の代わりに話し言葉を使用してください ;-))

于 2014-01-07T13:29:00.680 に答える