![](/img/trans.png)
[英]How do I prepend a directory the library path when loading a core file in gdb on Linux
[英]How do I prepend variable to open file stream when using split to create csv's?
I have a bash file that takes a large csv and splits the csv into smaller csv's based on this bloghttps://medium.com/swlh/automatic-s3-file-splitter-620d04b6e81c . 它运行良好,因为它从不下载 csv,这对于 lambda 来说非常有用。 拆分后的 csv 没有标头,只有原始 csv。 This is problem for me since I am not able to read with apache pyspark a set of files one with header row and many other files without header rows.
我想在每个写入的 csv 中添加一个 header 行。
代码的作用
文件
OUTFILES - 分成 300K 行
有效的原始代码
LINECOUNT=300000
INFILE=s3://"${S3_BUCKET}"/"${FILENAME}"
OUTFILE=s3://"${DEST_S3_BUCKET}"/"${FILENAME%%.*}"
FILES=($(aws s3 cp "${INFILE}" - | split -d -l ${LINECOUNT} --filter "aws s3 cp - \"${OUTFILE}_\$FILE.csv\" | echo \"\$FILE.csv\""))
这是我尝试将变量添加到传出文件 stream 中,但没有成功。
LINECOUNT=300000
INFILE=s3://"${S3_BUCKET}"/"${FILENAME}"
OUTFILE=s3://"${DEST_S3_BUCKET}"/"${FILENAME%%.*}"
HEADER=$(aws s3 cp "${INFILE}" - | head -n 1)
FILES=($(aws s3 cp "${INFILE}" - | split -d -l ${LINECOUNT} --filter "echo ${HEADER}; aws s3 cp - \"${OUTFILE}_\$FILE.csv\" | echo \"\$FILE.csv\""))
尝试2:
LINECOUNT=300000
INFILE=s3://"${S3_BUCKET}"/"${FILENAME}"
OUTFILE=s3://"${DEST_S3_BUCKET}"/"${FILENAME%%.*}"
HEADER=$(aws s3 cp "${INFILE}" - | head -n 1)
FILES=($(aws s3 cp "${INFILE}" - | split -d -l ${LINECOUNT} --filter "{ echo -n ${HEADER}; aws s3 cp - \"${OUTFILE}_\$FILE.csv\"; } | echo \"\$FILE.csv\""))
您可以使用 dash 参数将文件流式传输到标准输入 (stdin) 或标准 output (stdout)。
我不知道这是否可以通过打开的文件 stream 实现。
希望这可以帮助。 我认为您只是缺少添加 header 的cat
方面。
本文展示了一种拆分文件并使用split
命令和filter
arguments 提供 header 的方法。
使用该片段并将其应用于上面的代码似乎可行。 请注意,花括号内的 2 个命令是echo ${HEADER}
和cat
。 第一个, echo
在 stdout 上创建 header,然后第二个, cat
将 pipe aws cp
stdin 到 stdout,这是aws cp -
在 S3 上创建新文件。
HEADER='"Name", "Team", "Position", "Height(inches)", "Weight(lbs)", "Age"'
aws s3 cp ${INFILE} - | split -d -l ${LINECOUNT} --filter "{ echo ${HEADER} ; cat; } | aws s3 cp - \"${OUTFILE}\$FILE.csv\""
运行命令后,我观察到 3 个新文件,每个文件都有所需的 header。
head -n 1 *.csv
==> x00.csv <==
Name, Team, Position, Height(inches), Weight(lbs), Age
==> x01.csv <==
Name, Team, Position, Height(inches), Weight(lbs), Age
==> x02.csv <==
Name, Team, Position, Height(inches), Weight(lbs), Age
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.