我有多个以月份格式分隔的制表符分隔的数据文件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
,我可以合并所有文件。然而,仍然存在两个问题:
- 每个文件中都有一个会被连接起来的标题,这是我不想要的。
- 我会丢失文件名中存储的月份信息。
我认为我可以通过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