从txt文件制作csv

时间:2010-11-30 11:32:34

标签: csv awk

我有很多这样的txt文件:

Title 1
Text 1(more then 1 line)

我想从所有人那里制作一个csv文件,它看起来像这样:

Title 1,Text 1
Title 2,Text 2
Title 3,Text 3
etc

我怎么能这样做?我认为awk对它有好处,但不知道如何实现它。

3 个答案:

答案 0 :(得分:1)

我可以建议:

paste -d, file1 file2 file3

要处理大量文件,每个输出文件最多40个(未经测试,但关闭):

xargs -n40 files... echo >tempfile
num=1
for line in $(<tempfile)
do
    paste -d, $line >outfile.$num
    let num=num+1
done

答案 1 :(得分:0)

这与您发布的内容大致相同。

for text in *
do
    awk 'BEGIN {q="\""; print q}
         NR==1 {
                gsub(" "," ")    # why?
                gsub("Title: *","")
                print
               }
         NR>1  {
                gsub(" "," ")    # why?
                gsub("Content: *","")
                gsub(q,q q)
                print
               }

         END {print q}' "$text" >> ../final
done

修改

如果您有一堆只包含两行的文件,请尝试以下方法:

sed 'N;s/\n/,/' file*.txt

如果文件每行包含两行以上,那么它会将每对行放在同一行上,并用逗号分隔。

答案 2 :(得分:0)

给出包含以下数据的3个文件:

<强> FILE1.TXT

Heading 1
Text 1
Text 2

<强> FILE2.TXT

Heading 2
Text 1

<强> file3.txt

Heading 3
Text 1
text 2
Text 3

预期结果如下:

Heading 1,Text 1,Text 2 
Heading 2,Text1 
Heading 3,Text 1,text 2,Text 3

这是使用下面调用的程序createcsv.awk

来完成的
gawk -f createcsv.awk file1.txt file2.txt file3.txt

<强> createcsv.awk

{
  if (1 == FNR) {
     # It is the first line of a new file
     if (csvline != "") {
       # First file or empty files we can ignore
       print csvline;
     }
     csvline = "";
     delimiter = "";
  }
  csvline = csvline delimiter $0;
  if ("" == delimiter) { delimiter="," }
}
END{
 print csvline;
}