如何用Bash读取文件内容并插入到CSV文件第3列位置
在Bash中将文本文件内容插入CSV指定列的解决方案
这里有两种实用的Bash方法,帮你把File1.txt的每一行内容作为新列插入到File2.csv的第3列位置:
方法1:使用awk(灵活通用,适合复杂场景)
awk是处理文本和CSV的利器,这个命令可以精准控制列的位置:
awk 'BEGIN{FS=OFS=","} NR==FNR{a[NR]=$0; next} {print $1,$2,a[NR],$3}' File1.txt File2.csv
命令解释:
BEGIN{FS=OFS=","}:在处理文件前,设置输入和输出的分隔符都是逗号,确保CSV格式始终正确。NR==FNR{a[NR]=$0; next}:当处理第一个文件(File1.txt)时,把每一行内容存入数组a,用行号作为索引;next跳过后续逻辑,继续处理下一行。{print $1,$2,a[NR],$3}:处理第二个文件(File2.csv)时,按顺序打印前两列、数组中对应行号的内容(来自File1.txt)、第三列,自动用逗号分隔,完美实现插入到第3列的效果。
方法2:使用paste+cut(简洁直观,适合简单列操作)
如果你的需求比较简单,用paste和cut的组合更直接易懂:
paste -d, <(cut -d, -f1,2 File2.csv) File1.txt <(cut -d, -f3- File2.csv)
命令解释:
<(cut -d, -f1,2 File2.csv):提取File2.csv的前两列,作为第一个输入流。File1.txt:直接作为第二个输入流,每一行对应新列的内容。<(cut -d, -f3- File2.csv):提取File2.csv从第3列开始的所有列,作为第三个输入流。paste -d,:把这三个输入流按行合并,用逗号分隔每一部分,最终得到插入新列后的CSV内容。
测试验证
用你提供的示例文件测试这两个命令,都会输出你期望的结果:
2018-01-17,2018-01-18,2018-01-19,2018-01-20
6,a,1,f
7,b,2,g
8,c,3,h
9,d,4,i
10,e,5,j
内容的提问来源于stack exchange,提问作者NA0606
相关产品推荐
相关产品推荐

