示例数据:
"Monday","12345","Friday"
在上面的文件中,我想在 12345 和星期五之间添加一个新列。
我怎样才能做到这一点 ?
答案1
不涉及一些重型仪器(如sed
或awk
):
paste -d',' <(cut -d',' -f-2 file) column.file <(cut -d',' -f3- file)
这假定您要添加的列已保存在文件中column.file
。
答案2
假设您的数据像您显示的那样简单,您可以这样做
awk -F, -v OFS=, '{k=$3; $3="\"new text\""; $4=k}1' file
或者,
perl -F, -lane 's/$F[1]/$F[1],"new text"/; print' file
但是,对于可能包含嵌套逗号的数据,这将失败,例如:
"foo", "bar,baz", "bar"
上面是一个有效的 csv 文件,但这些解决方案会将其视为具有 4 个字段,而不是 3 个。如果您的数据可以包含类似的情况,则应该使用适当的 csv 解析器。
答案3
我刚刚遇到了同样的问题,但是剪切/粘贴答案对我来说不太有效,因为我想要一个空白字段,所以这对我有用:
查看要插入的文件中有多少行:
wc -l file.csv
假设
1.
给了你 30,然后使用 bash 循环在字段 3 和 4 之间插入一个空字段:paste -d, <(cut -d, -f-3 file.csv) <(for i in `seq 1 30`; do echo; done) <(cut -d, -f4- file.csv) > fileNew.csv