linux - AWK/bash 如何在 AWK 中包含文件名

标签 linux bash shell awk

我有以下 awk 脚本:

#! /bin/awk -f

BEGIN { FS = ":" }

{ print $1 " "  $2 " "  $3 " " $4 " "  }

我想用“#!/bin/bash”编写一个 bash 脚本,但我需要包含一个文件;当程序显示文件时。

#! /bin/bash

awk -f, '
FILENAME= $1
BEGIN { FS = ":" }

{ print $1 " "  $2 " "  $3 " " $4 " "  }

'

在上面的代码中,我尝试包含该文件但它不起作用?

最佳答案

不太清楚你想在这里传递什么。你想要一个获取文件名作为值的变量吗?最简单的方法是使用 -v var=value:

#! /bin/bash

awk -v MYFILENAME="$1" '
BEGIN { FS = ":" }

{ print MYFILENAME " " $1 " "  $2 " "  $3 " " $4 " "  }
'

请注意,FILENAME 是一个保留变量,您不能设置它。

或者你想传递输入文件?在那种情况下,您只需将它们传递给程序,如:

#! /bin/bash

awk '
BEGIN { FS = ":" }

{ print MYFILENAME " " $1 " "  $2 " "  $3 " " $4 " "  }
' "$1"

-f 选项是包含一个 awk 脚本,顺便说一下。所以 -f, 会要求 AWK 包含一个名为 , 的文件。

在 shell 级别,确保始终用 "..." 将变量括起来,如 "$1" 中那样,以便正确处理带空格的文件名。

关于linux - AWK/bash 如何在 AWK 中包含文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269181/

相关文章:

regex - Bash:重新定位字符串中的子字符串

linux - 阻止 'cp' 从 bash 脚本输出文件名

linux - linux中任何文件读/写操作涉及的步骤

bash - bash if 总是返回零吗?

xml - 使用 xmlstarlet 替换 XML 中的标记值

macos - 使用变量创建 Mac 终端脚本

linux - 为什么 bash 不会因短路命令序列中的错误而停止?

c++ - 尽管文件存在,但已编译的 C++ 程序在另一个系统上引发 "cannot open shared object file"

linux - 为什么 linux 内核中没有零拷贝网络?

bash - 提取两个模式之间的线并包括第一个上方和第二个下方的线