我是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一次从变量中解释一行?
答案 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
)。