制作csv文件

制作csv文件

我有两个不同的 textfiles.txt (textfile1.txt 和 textfile2.txt),其中包含不同的数据集。是否可以将两个单独的 .txt 文件编译为单个 CSV 文件?

更新

textfile1.txt 具有以下格式写入的值:

 20
 31
 18
 -11
 12
 19

textfile2.txt 具有以下格式写入的值:

100.000 200.000 300.000
101.000 201.000 301.000
102.000 202.000 302.000
103.000 203.000 303.000
104.000 204.000 304.000
105.000 205.000 305.000

我希望我的输出采用以下格式:

 20,100.000,200.000,300.000
 31,101.000,201.000,-301.000
 18,-102.000,202.000,302.000
-11,103.000,203.000,303.000
 12,104.000,204.000,304.000
 19,105.000,-205.000,305.000

答案1

paste将并排连接文件

paste -d, file1 file2

如果文件可能包含逗号或引号,但本身不是 CSV 数据,则需要首先将它们全部加上引号。

paste -d, \
 $<( sed 's/"/""/g;s/^/"/;s/$/"' < file1 ) \
 $<( sed 's/"/""/g;s/^/"/;s/$/"' < file1 )

或仅包含特殊字符的行

paste -d, \
 $<( sed '/[",]/ { s/"/""/g;s/^/"/;s/$/"; }' < file1 ) \
 $<( sed '/[",]/ { s/"/""/g;s/^/"/;s/$/"; }' < file2 )

答案2

如果您只想合并两个文件,那么cat textfile1.txt textfile2.txt > combined.txt就可以做到。

答案3

假设第二个文件使用制表符作为分隔符,那么您可以使用以下命令将第一个文件作为第一列附加到第二个文件

paste textfile1.txt textfile2.txt

结果将是一个 TSV 数据集(假设数据不包含嵌入换行符的字段):

20      100.000 200.000 300.000
31      101.000 201.000 301.000
18      102.000 202.000 302.000
-11     103.000 203.000 303.000
12      104.000 204.000 304.000
19      105.000 205.000 305.000

要将其转换为 CSV,您只需使用 ,将任何选项卡更改为逗号tr '\t' ',',或者,如果您有更复杂的数据(嵌入选项卡),请使用支持 CSV 的工具,例如 Miller ( mlr):

paste textfile1.txt textfile2.txt |
mlr --itsv --ocsv cat

选项--itsv(输入是 TSV)与--ocsv(输出是 CSV)组合可以组合成单个选项--t2c

相关内容