Awk Bash脚本逐行处理csv文件,同时使用不同的值更新$6,但保持其他值不变

Awk Bash脚本逐行处理csv文件,同时使用不同的值更新$6,但保持其他值不变,awk,Awk,我是bash脚本的初学者,我已经尝试修复这个问题8个多小时了。 我在StackOwerflow上搜索并尝试了符合我需要的答案,但没有成功 我想使用bash脚本将csv文件的日期值更改为当前日期 我正在使用一个伪.csv文件(),我想将第6个值(日期)更改为当前日期 到目前为止我一直在做的事情: 我已经创建了一行csv来测试脚本 cat oneline.csv: 澳大利亚和大洋洲,图瓦卢,婴儿食品,脱机,H,5/28/2010669165933,6/27/20109925255.28159.422

我是bash脚本的初学者,我已经尝试修复这个问题8个多小时了。 我在StackOwerflow上搜索并尝试了符合我需要的答案,但没有成功

我想使用bash脚本将csv文件的日期值更改为当前日期

我正在使用一个伪.csv文件(),我想将第6个值(日期)更改为当前日期

到目前为止我一直在做的事情: 我已经创建了一行csv来测试脚本

cat oneline.csv:

澳大利亚和大洋洲,图瓦卢,婴儿食品,脱机,H,5/28/2010669165933,6/27/20109925255.28159.422533654.001582243.50951410.50

然后我测试了单行脚本:

echo `cat oneline.csv | awk -F, '{ print $1"," $2"," $3"," $4"," $5","}'` `date` `cat oneline.csv |awk -F, '{print $7"," $8"," $9"," $10"," $11"," $12"," $13"," $14"\n"}' 
然后我在source.sh中为整个100行文件编写了以下代码:

#I want to change 6th value for every line of source.csv to current date and keep the rest and export it to output.csv
while read  
do
part1=$(`cat source.csv | awk -F, '{ print $1"," $2"," $3"," $4"," $5","}'`)
datum=$(`date`) 
part2=$(`cat source.csv |awk -F, '{print $7"," $8"," $9"," $10"," $11"," $12"," $13"," $14"\n"}'`)
echo `$part1 $datum $part2`
done

我希望运行类似于./source.sh>output.csv的命令

我希望完整的100行文件的结果如下: 食品,离线,H,Thu Jan 17 06:34:03东部时间2019669165933,6/27/20109925255.28159.422533654.001582243.50951410.50


您能告诉我如何更改代码以获得结果吗?

将所有内容重构为单个Awk脚本;这也避免了错误

简单地说,我们使用逗号(
-F,
)进行拆分,并用
-v
传入的变量值替换第六个字段的值
OFS=FS
将输出字段分隔符设置为输入字段分隔符(逗号)。然后
1
表示“无条件打印”

一般来说


切题地说,你的引用看起来很古怪;除非是希望shell运行的命令(这本身可能是个坏主意),否则不要在
$part1
周围使用反勾号。此外,backticks长期以来一直被弃用,取而代之的是
$(command)
语法,这种语法更清晰,并提供了一些语法优势。

另请参阅,非常感谢。你给我正确答案的速度真是太快了。我只需要弄清楚,如何在列和output.csv文件之间放置“,”而不是“,”将是正确的。再次感谢。编辑添加
OFS=FS
修复了这一问题。在您发表评论时,它已经被修复。感谢您的编辑,现在它也可以完美地使用“,”作为定界符。
awk -v datum="$(date)" -F , 'BEGIN { OFS=FS }
    { $6 = datum } 1' source.csv >output.csv