从文件开头获取值,将值作为新列插入,使用AWK/GAWK/SED修剪开头行

从文件开头获取值,将值作为新列插入,使用AWK/GAWK/SED修剪开头行,awk,sed,gawk,Awk,Sed,Gawk,希望有人能帮我。有几千个文件我想合并成一个,但是我需要在合并之前解析每个文件。每个文件都是自己的“站点”,在本例中为海上风力涡轮机 每个站点文件首先包含站点编号、额定上限、IEC等级、纬度和经度(损失百分比可忽略) 我想修剪每个站点文件的前三行,包括标题。但是,首先我想在每个文件中创建一列,其中包含站点号、额定CAP、IEC等级、纬度、经度以及日期、时间、速度80m和NETPOWER。我是命令行awk/gawk/sed的业余爱好者,不知道如何使用从文件开头解析的值(在本例中是站点号、额定上限等)

希望有人能帮我。有几千个文件我想合并成一个,但是我需要在合并之前解析每个文件。每个文件都是自己的“站点”,在本例中为海上风力涡轮机

每个站点文件首先包含站点编号、额定上限、IEC等级、纬度和经度(损失百分比可忽略)

我想修剪每个站点文件的前三行,包括标题。但是,首先我想在每个文件中创建一列,其中包含站点号、额定CAP、IEC等级、纬度、经度以及日期、时间、速度80m和NETPOWER。我是命令行awk/gawk/sed的业余爱好者,不知道如何使用从文件开头解析的值(在本例中是站点号、额定上限等)创建和填充新列

输入示例(每个站点文件的开头):

期望输出(无标题):其中每行为[站点、纬度、长度、额定上限、IEC等级、日期、时间(UTC)、速度80m(M/S)、净功率(MW)]

尽管我添加了大量冗余数据,但这是必要的,因为我要将所有站点文件合并为一个文件,因此需要为每一行提供唯一的值,以表示它来自哪个涡轮机。当解析并创建新列时,每个原始站点文件将从4列变为9列


非常感谢您的帮助!提前谢谢。

您需要这样的东西:

awk -v OFS=',' '
FNR==1 { split($0,a); next }
FNR==2 { hd = a[3] OFS $3 OFS $5 OFS a[6] OFS a[9]; next }
FNR>3  { print hd, $0 }
' file1 file2 ... fileN

哇!很好用!我对你感激不尽。有一件事,我怎么不打印输出中的标题呢?实际上第一行变成了<代码>01179,43.86593,-83.50252,20.0,2,日期、时间(UTC)、速度80m(M/S)、NETPOWER(MW)效果非常好!!哇,太谢谢你了!我不能投票给你的答案,因为我没有足够的分数,但我点击了检查作为答案。非常感谢Ed,没问题。如果你打算做更多的文本操作,我强烈建议你买一本阿诺德·罗宾斯的书《有效的Awk编程,第三版》。其他人可能会推荐不同的书籍或网页或其他东西,但相信我,他们会错的:-)。你知道,如果拉里·沃尔像埃德一样知道
awk
,那么
perl
永远不会出现<代码>:P
01179,43.86593,-83.50252,20.0,2,20040101,0010,10.80,13.75
01179,43.86593,-83.50252,20.0,2,20040101,0020,10.58,12.50
01179,43.86593,-83.50252,20.0,2,20040101,0030,10.83,13.32
01179,43.86593,-83.50252,20.0,2,20040101,0040,11.04,13.61
awk -v OFS=',' '
FNR==1 { split($0,a); next }
FNR==2 { hd = a[3] OFS $3 OFS $5 OFS a[6] OFS a[9]; next }
FNR>3  { print hd, $0 }
' file1 file2 ... fileN