将值放在全局变量(AWK脚本)中的文件中

时间:2015-09-14 14:14:48

标签: bash variables awk gawk

我的脚本awk的条目中有几个文件(.csv)。我将这些文件分隔在其他文件(.csv)中,我在sql loader(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

3 个答案:

答案 0 :(得分:2)

It looks like this is what you are trying to do:

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

Get the book "Effective Awk Programming", 4th Edition, by Arnold Robbins.

答案 1 :(得分:1)

查看BEGIN和END for awk:

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

开始块执行一次,所以在那里设置你的变量。

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

答案 2 :(得分:1)

您可以使用-v选项为awk脚本定义变量。例如,假设您有env变量$ 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 $1, date}' file.csv > result.csv