我正在研究如何把数据输入Hive。问题是,我已经覆盖了我的历史数据,所以我需要在文本文件中包含文件名,这样我就可以处理在后续文件中更新的重复行。
我选择的方法是 awk
若要将文件名添加到每个文件中,则在我将其摄取到配置单元中之后,我可以使用hql筛选出不推荐使用的行。
以下是我的示例数据(以制表符分隔):
animal legs eyes
hippo 4 2
spider 8 8
crab 8 2
mite 6 0
bird 2 2
我已经给它命名了 long_name_20180901.txt
我从这篇文章中找到了如何添加我的新专栏:
awk '{print FILENAME (NF?"\t":"") $0}' long_name_20180901.txt
结果是:
long_name_20180901.txt animal legs eyes
long_name_20180901.txt hippo 4 2
long_name_20180901.txt spider 8 8
long_name_20180901.txt crab 8 2
long_name_20180901.txt mite 6 0
long_name_20180901.txt bird 2 2
但是,作为一个初学者,我不知道如何将这个命令扩展到:
使列名(第一行)类似于“文件名”
在awk中实现regex,只提取文件名中我需要的部分,并处理其余部分。我真的只想 "long_name_(.{8,}).txt"
(抓捕组的东西。
目标输出为:
file animal legs eyes
20180901 spider 8 8
20180901 crab 8 2
20180901 mite 6 0
20180901 bird 2 2
谢谢你的时间!!我完全是个新手 awk
.
2条答案
按热度按时间dwthyt8l1#
这将处理一个或多个输入文件:
lg40wkob2#
你可以用
BEGIN
设置“文件”,然后将其重置为使用其余文件名。