你能先试试吗?(不保存输出到 file.csv 本身它会在终端打印输出一旦开心就可以使用答案 在这篇文章的最后提供)
file.csv
awk -v val=$(date -d yesterday +%F) 'BEGIN{FS=OFS=";"}FNR>1{$1=val} 1' file.csv
的 OP代码中发现的问题(并在我的建议中修复): 强>
1-现在折旧使用反引号来保存shell变量的值,所以改为使用 val=$(date....) 用于声明awk的变量名称 val 。
val=$(date....)
val
2-使用 -F ,您已将字段分隔符设置为 \| 这是管道,但是当我们仔细看到你提供的示例Input_file时,它将被分隔 ; (半结肠)不 | 所以这也是它没有反映出产量的原因之一。
-F
\|
;
|
3-自使用以来 gsub($1,val) ,将整行替换为变量val的值 因为 gsub的语法类似于: gsub(your_regex/value_needs_to_be_replaced,"new_value"/variable_which_should_be_there_after_replacement,current_line/variable) 。由于您已经定义了错误的字段分隔符,因此整行被视为 $1 因此当你打印它时 awk -F\| -v val=$(date -d yesterday +%F) 'NR>1 {gsub($1,val)} 1' file.csv 它只会打印以前的日期。
gsub($1,val)
gsub(your_regex/value_needs_to_be_replaced,"new_value"/variable_which_should_be_there_after_replacement,current_line/variable)
$1
awk -F\| -v val=$(date -d yesterday +%F) 'NR>1 {gsub($1,val)} 1' file.csv
4-4和主要问题是你没有打印任何东西,所以即使你犯了错误,你也不会在终端或输出文件中看到任何输出。
如果高兴,那么你可以运行自己的命令来对Input_file本身进行更改。(我假设你有正确的值在你的 tmp 变量在这里)
tmp
tmp=$(mktemp) && awk -v val=$(date -d yesterday +%F) 'BEGIN{FS=OFS=";"}FNR>1{$1=val} 1' file.csv > "$tmp" && mv "$tmp" file.csv