パラメータを渡して、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  '{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

関連情報