是否可以结合使用bash和awk脚本文件?

时间:2011-12-18 12:44:26

标签: file bash awk

我有一些bash脚本,我获取变量的值,我想在awk中使用。 是否可能在bash中包含整个awk(就像bash脚本文件一样可能)文件,例如:

#!/bin/sh
 var1=$1
source myawk.sh

和myawk.sh:

print $1;

3 个答案:

答案 0 :(得分:2)

首先,如果您正在编写bash,请不要使用#!/bin/sh,这将使您处于兼容模式,只有在您编写可移植性时才必须这样做(然后您必须遵守POSIX标准化的)。

现在关于你的问题,你只需要在你的bash脚本中运行awk,就像这样:

#!/bin/bash
var1=$1
awk -f myawk.sh

你也应该使用.awk作为扩展名。

答案 1 :(得分:1)

或者,许多人都这样做:

#!/bin/env bash
#Bash things start
 ...
var1=$1
#Bash things stop
#Awk things start, 
#may use pipes or variable to interact with bash 
awk -v V1=var1 '
#AWK program, can even include awk scripts here.
'
#Bash things

我在这里建议Bruce Barnett这个页面:

http://www.grymoire.com/Unix/Awk.html#uh-3

您也可以使用双引号来使用shell的提取功能,但这很令人困惑。

就个人而言,我只是试图避免那些花哨的gnu添加bash或awk并使我的脚本ksh +(n)awk兼容。

答案 2 :(得分:1)

作为一名核心AWK用户,我很快就意识到做以下事情确实是一个巨大的帮助:

  1. 在我的bashrc中定义和导出AWK_REPO变量
    #Content of bashrc
    export AWK_REPO=~/bin/AWK
  2. 使用.awk扩展名存储我编写的每个AWK脚本。
  3. 然后您可以从以下任何地方拨打电话:
    awk -f $AWK_REPO/myScript.awk $file
    甚至,使用Shebangs并将AWK_REPO添加到PATH(带export PATH=${AWK_REPO}:${PATH}
    myScript.awk $file