Ama*_*ein 2 awk shell-script for
我尝试awk在for循环中使用命令,但没有成功。
我有一个包含一系列字符串的变量,我想用这些字符串awk来获取数据。
我知道该怎么做,但我真正想要的是连续切割数据。
所以我有这个变量:
var="data1,data2,data3"
Run Code Online (Sandbox Code Playgroud)
我现在在这里:
for ((i=1; i<=3; i++))
do
echo $(awk -F, '{print $1}' <<< $var)
done
Run Code Online (Sandbox Code Playgroud)
我尝试用$1循环替换 ,$i但没有成功。
您可以通过在 awk 脚本中使用双引号将 shell 变量注入其中来完成您想要执行的操作。您仍然希望在其中保留一个文字$,您可以通过使用反斜杠对其进行转义来实现:
echo $(awk -F, "{print \$$i}" <<<$var)
Run Code Online (Sandbox Code Playgroud)
这将扩大$i至1,2并3在每次迭代,因此awk将看到$1,$2并且$3这将使其成为每个领域的拓展。
另一种可能性是使用以下-v标志将 shell 变量作为 awk 变量注入:
echo $(awk -F, -v i="$i" '{print $i}' <<<$var)
Run Code Online (Sandbox Code Playgroud)
这将 awk 变量i分配给具有相同名称的 shell 变量的内容。awk 中的变量不使用 a $,它用于字段,因此如果i是 awk 中的变量,$i则足以引用第i个字段。
分配 awk 变量-v通常是一种更安全的方法,特别是当它可以包含任意字符序列时,在这种情况下,内容将作为 awk 代码执行的风险较小。但由于在您的情况下,变量包含一个整数,因此不必担心。
另一种选择是for在 awk 本身中使用循环。有关如何执行此操作的更多详细信息,请参阅 awk 文档(或搜索此站点)。