LINUX.ORG.RU

История изменений

Исправление legolegs, (текущая версия) :

Вроде разобрался. Были непонятки с sort из-за локали и из-за того, что в мане плохо описан ключ -k.

for i in log1.txt log2.txt; do
    <$i awk '
        /^[[:digit:]]/ {
            close("base64 -w0");
            printf("\n%s\t%s\t%s %s\t",$1,$2,$3,$4); /*id, month, day, time => id, month, day+time*/
        }
        {
            print | "base64 -w0"
        }
    ' | tail -n+2 > ${i%.*}.b64;
done
LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64 | cut -f4 | base64 -d > full_log.txt

Если, допустим, тестовые данные такие, что:

# cut -f1,2,3 log?.b64
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Jan     20 12:34
12729   Feb     20 12:34
12729   Jun     20 12:34
12729   Dec     20 12:34
12729   Nov     08 07:30
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30

то, меняя порядок -k...-ключей у sort можно выбирать, по каким столбцам в каком порядке сортировать. Например:

# LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64| cut -f1,2,3
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Dec     20 12:34
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34

Или, если номера не обязательно последовательны, то сначала опираемся на дату:

# LANG=C sort -t$'\t' -k2Mr -k3r -k1nr -u log?.b64| cut -f1,2,3
12729   Dec     20 12:34
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34

Ключи sort: число - номер поля, M - сортировка месяцев JAN<FEB<...<DEC , n - числовая сортировка, r - задом наперёд.

Исправление legolegs, :

Вроде разобрался. Были непонятки с sort из-за локали и из-за того, что в мане плохо описан ключ -k.

for i in log1.txt log2.txt; do
    <$i awk '
        /^[[:digit:]]/ {
            close("base64 -w0");
            printf("\n%s\t%s\t%s %s\t",$1,$2,$3,$4); /*id, month, day, time => id, month, day+time*/
        }
        {
            print | "base64 -w0"
        }
    ' | tail -n+2 > ${i%.*}.b64;
done
LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64 |  base64 -d > full_log.txt

Если, допустим, тестовые данные такие, что:

# cut -f1,2,3 log?.b64
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Jan     20 12:34
12729   Feb     20 12:34
12729   Jun     20 12:34
12729   Dec     20 12:34
12729   Nov     08 07:30
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30

то, меняя порядок -k...-ключей у sort можно выбирать, по каким столбцам в каком порядке сортировать. Например:

# LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64| cut -f1,2,3
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Dec     20 12:34
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34

Или, если номера не обязательно последовательны, то сначала опираемся на дату:

# LANG=C sort -t$'\t' -k2Mr -k3r -k1nr -u log?.b64| cut -f1,2,3
12729   Dec     20 12:34
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34

Ключи sort: число - номер поля, M - сортировка месяцев JAN<FEB<...<DEC , n - числовая сортировка, r - задом наперёд.

Исходная версия legolegs, :

for i in log1.txt log2.txt; do
    <$i awk '
        /^[[:digit:]]/ {
            close("base64 -w0");
            printf("\n%s\t%s\t%s %s\t",$1,$2,$3,$4); /*id, month, day, time*/
        }
        {
            print | "base64 -w0"
        }
    ' | tail -n+2 > ${i%.*}.b64;
done
LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64 |  base64 -d > full_log.txt

Если, допустим, тестовые данные такие, что:

# cut -f1,2,3 log?.b64
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Jan     20 12:34
12729   Feb     20 12:34
12729   Jun     20 12:34
12729   Dec     20 12:34
12729   Nov     08 07:30
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30

то, меняя порядок -k...-ключей у sort можно выбирать, по каким столбцам в каком порядке сортировать. Например:

# LANG=C sort -t$'\t' -k1nr -k2Mr -k3r -u log?.b64| cut -f1,2,3
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Dec     20 12:34
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34

Или, если номера не обязательно последовательны, то сначала опираемся на дату:

# LANG=C sort -t$'\t' -k2Mr -k3r -k1nr -u log?.b64| cut -f1,2,3
12729   Dec     20 12:34
12731   Nov     08 07:31
12730   Nov     08 07:30
12729   Nov     08 07:30
12729   Nov     08 07:30
12729   Jun     20 12:34
12729   Feb     20 12:34
12729   Jan     20 12:34