我有很多这样的txt文件:
Title 1
Text 1(more then 1 line)
我想从所有人那里制作一个csv文件,它看起来像这样:
Title 1,Text 1
Title 2,Text 2
Title 3,Text 3
etc
我怎么能这样做?我认为awk对它有好处,但不知道如何实现它。
答案 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;
}