0

我对 shell 脚本和 bash 完全陌生。我的问题是如何让 awk 解释包含换行符的变量,就像 awk 解释来自标准输入的数据一样?

例子:

fileData=`cat /path/to/file`
echo $fileData | awk '{print $1}'

上面的代码导致以下错误消息:awk: program limit exceeded: maximum number of fields size=32767这显然意味着 awk 会$fileData同时解释所有行,而不是一次解释一行。

如何让 awk 从变量中一次解释一行?

4

1 回答 1

1

如果我正确理解您的问题,我怀疑您的问题与 , 的关系不大awk,而与外壳空白分割有关。您的问题是外壳已将内部的换行符$fileData作为空白字段分隔符。为了防止这种情况:

echo "$fileData" | awk '{print $1}'

例如,您还可以使用关联数组export fileData直接访问环境变量(awkenvironenviron["fileData"]

顺便说一句,我希望你的代码只是一个简单的例子,

awk '{print $1}' /path/to/file

是首选。原样:

fileData=$(cat /path/to/file)

过度使用反引号(尽管cat很少需要)。

于 2012-09-23T08:05:54.193 回答