我有一个文件夹,其中包含超过40万个txt文件。
名称类似
deID.RESUL_12433287659.txt_234323456.txt
deID.RESUL_34534563649.txt_345353567.txt
deID.RESUL_44235345636.txt_537967875.txt
deID.RESUL_35234663456.txt_423452545.txt
每个文件具有不同的内容
我想获取文件名和文件内容并以CSV格式保存。
类似的东西:
file_name,file_content
deID.RESUL_12433287659.txt_234323456.txt,Content 1
deID.RESUL_34534563649.txt_345353567.txt,Content 2
deID.RESUL_44235345636.txt_537967875.txt,Content 3
deID.RESUL_35234663456.txt_423452545.txt,Content 4
我知道如何使用以下方法来抓取CSV目录中的所有文件:
find * > files.csv
我还如何获取文件内容?
答案 0 :(得分:0)
1010
是用逗号分隔的文件。您展示了一张桌子。csv
有点奇怪,find *
已经进行了递归扫描。 find
足以包含所有find .
(好吧,除非您考虑到一些奇怪的shell glob规则)。
find *
将输出:
# create file for a MCVE
while IFS=' ' read -r file content; do echo "$content" > "$file"; done <<EOF
deID.RESUL_12433287659.txt_234323456.txt Content 1
deID.RESUL_34534563649.txt_345353567.txt Content 2
deID.RESUL_44235345636.txt_537967875.txt Content 3
deID.RESUL_35234663456.txt_423452545.txt Content 4
EOF
{
# I'm using `|` as the separator for columns
# output header names
echo 'file_name|file_content';
# this is the hearth of the script
# find the files
# for each file execute `sh -c 'printf "%s|%s\n" "$1" "$(<"$1")"' -- <filename>`
# printf - nice printing
# "$(<"$1")" - gets file content and also removes trailing empty newlines. Neat.
find . -type f -name 'deID.*' -exec sh -c 'printf "%s|%s\n" "$1" "$(<"$1")"' -- {} \;
} |
# nice formatting:
column -t -s'|' -o ' '