У меня есть несколько файлов данных с разделителями табуляцией, которые разделены по месяцам в формате jan06.txt, feb06.txt, ..., dec07.txt .

Внутри каждого файла это выглядит примерно так:

Header1 Header2 Header3 ...
Data1   Data2   Data3   ...
Data4   Data5   Data6   ...
...     ...     ...

Я хочу объединить все файлы данных в один файл данных с одним заголовком вверху, а также включить новый столбец данных, содержащий месяц и год, чтобы я не потерял эту информацию из имя файла Так что мой новый файл данных будет содержать:

Date   Header1 Header2 Header3 ...
200601 Data1   Data2   Data3   ...
200602 Data4   Data5   Data6   ...
...    ...     ...     ...

Где 200601 относится к 06 января, 200602 относится к 06 февраля и т.д.

Я знаю, что если я сделаю что-то вроде cat *.txt > data.txt , я смогу объединить все мои файлы. Тем не менее, остаются две проблемы:

  1. У меня есть заголовок в каждом файле, который будет объединен, что я не хочу.
  2. Я потерял бы информацию о месяце, которая хранится в имени файла.

Я думаю, что могу сделать это с некоторой комбинацией cat и sed , но я не уверен, как начать.

1 ответ1

0

Вот программа awk, которая должна делать то, что вам нужно:

awk '
    BEGIN {
        # create an array so we can map the month number to month name
        split("jan feb mar apr may jun jul aug sep oct nov dec", months)
    }
    function filename2date(filename,         month, year, i) {
        month = substr(filename, 1, 3)
        year = substr(filename, 4, 2)
        for (i=1; i<=12; i++) 
            if (months[i] == month) 
                return sprintf("20%s%02d", year, i)
        return filename
    }
    NR == 1  { 
        # this is the first line of the first file
        print "Date", $0 
    }
    FNR == 1 { 
        # this is the first line of each file
        date = filename2date(FILENAME)
        next
    }
    { print date, $0 }
' ???[0-9][0-9].txt > data.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .