将多个数据文件与标题合并,同时添加数据列

将多个数据文件与标题合并,同时添加数据列

我有多个以月份格式分隔的制表符分隔的数据文件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 代表 1 月 6 日,200602 代表 2 月 6 日,等等。

我知道如果我做类似的事情cat *.txt > data.txt,我可以合并所有文件。然而,仍然存在两个问题:

  1. 每个文件中都有一个会被连接起来的标题,这是我不想要的。
  2. 我会丢失文件名中存储的月份信息。

我认为我可以通过cat和的某种组合来做到这一点sed,但我不知道如何开始。

答案1

这是一个可以完成您需要的操作的 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

相关内容