将来自文件的值放入全局变量(AWK 脚本)

Put a value comes from a file in a global variable (AWK script)

我的脚本 awk 条目中有几个文件 (.csv)。我将这些文件分隔在其他文件 (.csv) 中,然后借助 sql 加载程序 (oracle) 将这些文件的数据插入到数据库中。

我想在文件中放入一个值以放入我可以在 my awk script 中随处使用的全局变量。

您知道如何在 AWK script.

中创建全局变量吗

提前致谢

示例:file.csv

NUMBER1;TEXT1;DATE1
NUMBER2;TEXT2;DATE1
NUMBER3;TEXT3;DATE1
NUMBER4;TEXT4;DATE1
NUMBER5;TEXT5;

我想用这些信息创建一个新文件 (result.csv)

NUMBER1;DATE1
NUMBER2;DATE1
NUMBER3;DATE1
NUMBER4;DATE1
NUMBER5;DATE1

查看 awk 的 BEGIN 和 END:

awk 'BEGIN { globalvar = "x" } {} '

begin 块执行一次,因此请在那里设置变量。

看这里:http://code.linuxnix.com/2013/02/awk-scripting-10-begin-and-end-block-examples.html

您可以使用 -v 选项为您的 awk 脚本定义变量。例如,假设您有环境变量 $DATE.

$ DATE=$(date)
$ awk -v date="$DATE" '{print date}' <<< "ignore"
Mon Sep 14 10:27:59 EDT 2015

由于您的示例 file.csv 已经包含所有字段,所以我不确定您要传递给脚本的变量是什么。但是,假设您想要 file.csv 中的第一个字段并使用日期变量生成 result.csv,您可以这样做

awk -F";" -v OFS=";" -v date="$DATE" '{print , date}' file.csv > result.csv

看起来这就是您要执行的操作:

$ awk 'BEGIN{FS=OFS=";"} NR==1{date=$NF} {print ,date}' file
NUMBER1;DATE1
NUMBER2;DATE1
NUMBER3;DATE1
NUMBER4;DATE1
NUMBER5;DATE1

获取 Arnold Robbins 的书 "Effective Awk Programming",第 4 版。