2017-06-12 109 views
1

我试着去创建一个bash文件执行以下任务bash脚本和编辑CSV

1 - 我有一个名为“ORDER.CSV”文件名需要进行文件的副本,并追加日期/时间到文件名 - 这是我能够完成的

2-需要编辑上面创建的新csv文件中的特定字段。 DY列和第2行。这一直没能做到。我需要插入日期bash脚本在这一行中运行。需要采用此格式DDMMYY

3-然后将系统上载到SFTP。我相信我知道如下所示。

#!/usr/bin/env bash 

林能把这个步骤下面命令来完成

# Copies order.csv and appends file name date/time 


#cp /mypath/SFTP/order.csv /mypath/SFTP/orders.`date +"%Y%m%d%H%M%S"`.csv 

需要帮助呼应新的文件名

echo "new file name " 

需要帮助下科拉姆DY行2.需要编辑领域以此格式插入当前日期MMDDYYYY

awk -v r=2 -v DY=3 -v val=1001 -F, 'BEGIN{OFS=","}; NR != r; NR == r {$c = val; 
print}' 

这应该连接到SFTP,它可以解决问题。

sshpass -p MyPassword sftp -o "Port 232323" 
[email protected] 

需要传递创建并放入SFTP服务器的新文件。

put /incoming/neworder/NEWFILEName.csv 

感谢

+0

什么是列DY?它是列名(标题)? “DY = 3”是什么意思? – karakfa

+0

对不起,标题名称。谢谢 – rookievmc

回答

1

我想这是你想要做什么......

echo -e "h1,h2,h3,h4\n1,2,3,4" | 
awk -v r=2 -v c=3 -v v=$(date +"%d%m%y") 'BEGIN{FS=OFS=","} NR==r{$c=v}1' 

h1,h2,h3,h4 
1,2,120617,4 

找到从列名(未测试)

... | awk -v r=2 -v h="DY" -v v=$(date +"%d%m%y") ' 
     BEGIN {FS=OFS=","} 
     NR==1 {c=$(NF+1); for(i=1;i<=NF;i++) if($i==h) {c=i; break}} 
     NR==r {$c=v}1' 

列索引这样做的风险是列名可能不匹配,在这种情况下,这会将该值添加为新列。