如何合并多个具有相同标题的csv文件

时间:2019-09-10 20:59:51

标签: csv unix hdfs

在我的hdfs文件夹中,我不断获取输入文件。我想从最后15分钟开始合并多个具有相同标头的csv文件,并制作一个具有一个标头的csv文件。我尝试了-getmerge,但是没有用。有指针吗?

1 个答案:

答案 0 :(得分:2)

我指的是以下链接,以获取最近“ 5分钟”内处理的文件列表。

Get the list of files processed in last 5 minutes 由于您要跳过单个标题,并使用单个标题合并所有列出的文件。 可以将这些文件保存到本地unix,如下所示:

#!/bin/bash

filenames=`hdfs dfs -ls /user/vikct001/dev/hadoop/external/csvfiles/part* | tr -s " " | cut -d' ' -f6-8 | grep "^[0-9]" | awk 'BEGIN{ MIN=5;LAST=60*MIN; "date +%s" | getline NOW } { cmd="date -d'\''"$1" "$2"'\'' +%s"; cmd | getline WHEN; DIFF=NOW-WHEN; if(DIFF < LAST){ print $3 }}' `

for file in $filenames
do
   #echo $file
   hdfs dfs -get ${file} /home/vikct001/user/vikrant/shellscript/testfiles
done

一旦列出的文件位于本地。可以使用以下命令将所有文件合并为单个标头。

awk '(NR == 1) || (FNR > 1)' /home/vikct001/user/vikrant/shellscript/testfiles/part*.csv > bigfile.csv

这里是有关更多详细信息的链接。 Merge csv with a single header

上面的链接中提到了另外两个命令,但是我发现这是最合适的。