将目录中每个文件的cat内容转换为csv记录

时间:2016-12-13 20:25:34

标签: bash shell

我需要准备一个csv作为加载数据的方法。我有一个目录,其中包含n个html文件。需要将每个html文件的代码复制并粘贴到csv字段中。理想情况下,这就是我希望csv看起来像

FileName                     Code
filename1.html               contents of filename1.html here
filename2.html               contents of filename2.html here

我知道有办法将目录的ls管道输入csv,但是我不确定如何实现以下结果。 我想我可能需要创建一个循环并每次添加文件时在每个间隔添加分隔符。但我不太清楚从哪里开始。将其写为shell / bash脚本是最好的

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:1)

  • 使用我上面提到的文件ab创建一个文件夹
  • 使用此文件夹中的脚本内容创建名为shell.sh的文件

运行以下命令以使shell脚本可执行

chmod +x shell.sh

在运行脚本之前,请更改以下行:

files=$(ls)

files=$(ls | grep -v shell | grep -v csv)

然后运行以下命令以查看脚本的输出

./shell.sh

现在将其重定向到您的csv文件:

./shell > file.csv

要查看文件file.csv运行的内容:

cat file.csv

答案 1 :(得分:0)

假设您有两个文件:

文件a包含:

abc

123

文件b包含:

def

456

这样:

#!/bin/bash

echo "Filename,Code"

files=$(ls)

for file in ${files[@]}; do
    echo -n $file,
    tr -d '\n' < $file
    echo ""
done

上面的代码将输出:

Filename,Code

a,abc123

b,def456

答案 2 :(得分:0)

不是bash,而是简单的ruby脚本,用于创建以文件名和文件内容为列的CSV文件:

require 'csv'

@path = ARGV[0]

files = []
files << ['filename', 'contents']
Dir.foreach(@path) do |filename|
  next if filename == '.' or filename == '..'

  files << [filename, File.read("#{@path}/#{filename}")]
end
File.write("#{@path}/result.csv", files.map(&:to_csv).join)

用法:ruby script.rb <path>