如何使用paste命令合并文件并保存至其中一个被合并文件?
正确使用paste合并分号分隔表格并更新目标文件
问题根源分析
- 分隔符参数语法错误:你之前的命令
paste -d"";"" Grades_HW1 Grades > Grades里,-d的参数写法错误。分号是Shell的命令分隔符,必须用引号包裹成-d";",或者用反斜杠转义成-d\;,否则Shell会把分号当成命令结束符,导致命令执行异常。 - 直接覆盖目标文件的风险:当你把输出直接重定向到
Grades(同时作为输入文件)时,Shell会先清空Grades文件再执行paste命令,这就导致paste读取的Grades已经是空文件,最终结果自然只剩Grades_HW1的内容。
正确操作步骤
要实现按列合并两个文件(把Grades_HW1的内容作为新列追加到Grades的每一行后面,用分号分隔),并安全更新目标文件,需要借助临时文件过渡:
- 执行正确的
paste命令,将合并结果输出到临时文件:
paste -d";" Grades Grades_HW1 > Grades.tmp
注意:如果要把
Grades_HW1的内容放在原有列的前面,就交换两个输入文件的顺序:paste -d";" Grades_HW1 Grades > Grades.tmp
- 用临时文件替换原目标文件:
mv Grades.tmp Grades
额外说明
- 不要用
>>追加,因为>>是按行追加内容到文件末尾,而paste的作用是按列合并文件的对应行,二者是完全不同的操作,用>>根本达不到你要的列合并效果。
内容的提问来源于stack exchange,提问作者wchen4
相关产品推荐
相关产品推荐

