我正在尝试创建一个bash文件来执行以下任务
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 "
需要帮助编辑Colum DY Row 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"
myusername@mysftpserver.com
需要传递已创建并放入SFTP服务器的新文件。
put /incoming/neworder/NEWFILEName.csv
由于
答案 0 :(得分: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'
执行此操作的风险是列名可能不匹配,在这种情况下,这会将值添加为新列。