如何编写Bash脚本同时逐行读取两个CSV文件并格式化输出
实现两个文件对应行拼接的Bash脚本方法
这里提供几种简单高效的Bash脚本实现方式,满足你将file1.csv和file2.csv对应行拼接为[内容1] and [内容2]格式的需求:
方法1:使用paste+sed(最简洁)
paste命令天生用于按行合并多个文件,配合sed替换分隔符即可:
paste file1.csv file2.csv | sed 's/\t/ and /'
- 原理:
paste默认用制表符(\t)分隔两个文件的对应行内容,sed将制表符替换为指定的and字符串。
方法2:使用awk命令(灵活可控)
awk可以直接处理多文件的行关联,逻辑清晰:
awk 'NR==FNR{a[NR]=$0;next}{print a[NR], "and", $0}' file1.csv file2.csv
- 原理:
NR==FNR:处理第一个文件(file1.csv)时,将每行内容存入数组a,索引为行号NR;next:跳过后续逻辑,继续处理第一个文件的下一行;- 处理第二个文件(
file2.csv)时,取出数组中对应行号的内容,与当前行拼接输出。
方法3:使用while循环(基础逻辑演示)
如果需要更直观的逐行读取逻辑,可以用文件描述符配合循环:
#!/bin/bash # 打开文件描述符关联两个文件 exec 3<file1.csv exec 4<file2.csv # 循环读取每行,直到其中一个文件结束 while read -r line1 <&3 && read -r line2 <&4; do echo "$line1 and $line2" done # 关闭文件描述符 exec 3<&- exec 4<&-
- 原理:通过文件描述符3和4分别关联两个文件,循环中同时读取两行内容并拼接输出,最后关闭描述符释放资源。
以上三种方法运行后,都会输出预期结果:
a and 1 b and 2 c and 3 d and 4
内容的提问来源于stack exchange,提问作者Pisers
相关产品推荐
相关产品推荐

