通过传递参数在 Linux 中的 CSV 文件中添加一列

通过传递参数在 Linux 中的 CSV 文件中添加一列

我想通过在运行时传递参数来在 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

相关内容