Bash脚本和编辑CSV

时间:2017-06-12 19:05:59

标签: bash terminal

我正在尝试创建一个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

由于

1 个答案:

答案 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'

执行此操作的风险是列名可能不匹配,在这种情况下,这会将值添加为新列。