Я работаю над тем, чтобы обработать некоторые данные для загрузки в HiveПроблема в том, что я перезаписываю свои исторические данные, поэтому мне нужно включить имя файла в текстовые файлы, чтобы я мог избавиться от дублированных строк, которые были обновлены в последующих файлах.
Я выбрал для этого способ awk
, чтобы добавить имя файла к каждому файлу, а затем, после входа в Hive, я могу использовать 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
Но, будучи новичком, я не знаю, как дополнить эту команду до:
- сделать имя столбца (первая строка) чем-то вроде "file_name"
- реализовать регулярное выражение в awk, чтобы просто извлечь часть имени файла, которая мне нужна, и избавиться от остального.Я действительно просто хочу
"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
.