我有两个不同的 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
。