我想通过在运行时传递参数来在 Linux 中的 CSV 文件中添加一列。
例如我的输入文件Input.csv
具有以下内容:
abc,Nodes.csv
def,Nodes.csv
ghi,Nodes.csv
jkl,Nodes.csv
现在我想在运行脚本时在运行时传递一个参数,例如./Datafile.sh CRE_ff
输出文件应如下所示:
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
答案1
我们可以创建一个csvprepend
命令:
#!/usr/bin/gawk -f
BEGIN { field=ARGV[1]; delete ARGV[1]; OFS=","}
{ print field,$0 }
并使用它:
$ chmod 755 cvsprepend # turn it in an executable command
$ cvsprepend "New field" old.csv
New Field,abc,Nodes.csv
New Field,def,Nodes.csv
细节:
field=ARGV[1]; delete ARGV[1]
保存第一个命令行参数。作为field
OFS=","
设置输出字段分隔符print field,$0
打印新字段、OFS、上一条记录。
答案2
尝试使用下面的 awk 和 sed 命令。Python,效果很好
awk解决方案:
awk '{print "CRE_ff_Nodes_abc,"$0}' filename
输出
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
命令2:
sed "s/^/CRE_ff_Nodes_abc,/g" filename
输出
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv
Python
#!/usr/bin/python
o=open('filename','r')
for i in o:
print "CRE_ff_Nodes_abc,{0}".format(i).strip()
输出
CRE_ff_Nodes_abc,abc,Nodes.csv
CRE_ff_Nodes_abc,def,Nodes.csv
CRE_ff_Nodes_abc,ghi,Nodes.csv
CRE_ff_Nodes_abc,jkl,Nodes.csv