让awk一次从变量解释一行

时间:2012-09-23 07:55:14

标签: bash shell awk echo

我是shell脚本和bash的新手。我的问题是如何让awk解释包含换行符的变量,就像awk从stdin解释数据一样?

示例:

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

您还可以使用关联数组export fileData直接从awk访问环境变量(environ),例如environ["fileData"],但这可能是一个不好的存储策略由于存在破坏内存的风险,变量中的整个文件内容。

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

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

是首选。原样:

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

过度使用反引号(虽然很少需要cat)。