【发布时间】:2022-02-21 17:44:30
【问题描述】:
我正在尝试从 2 列 txt 文件中分配 awk 获得的变量。 到一个命令,其中包含每两个值作为两个变量。
比如我使用的文件是;
foo.txt
10 20
33 40
65 78
我的命令旨在打印;
end=20 start=10
end=40 start=33
end=78 start=65
基本上,我想对每一行的代码进行迭代,对于输出,输入文件的两列中会有两个变量。
我不是 awk 专家(我正在尽我最大的努力),到目前为止我能做的就是这种融合;
while read -r line ; do awk '{ second_variable=$2 ; first_variable=$1 ; }' ; echo "end=$first_name start=$second_name"; done <foo.txt
但它只给出这个输出;
end= start=
只有一次,没有任何变量。我会很感激任何建议。谢谢。
【问题讨论】:
-
注意:在
awk中分配一个变量不会在 shell 中创建/设置该变量(反之亦然)。 awk 和 shell 的变量是完全分开的。 -
我不能完全理解,我不能在分配了 awk 嵌入式代码的 shell 脚本中使用变量吗?谢谢。
-
不,你不能。每个进程(无论是运行 bash,还是
awk或其他)都有自己的私有内存,它可以保存它可能拥有的任何变量。您需要执行一些操作,例如从awk打印变量,在 bash 中捕获输出并将其分配给 bash 变量。您还需要注意不要在子 shell 中分配 bash 变量,因为子 shell 是与主 shell 不同的进程,所以它也有自己的独立变量(请参阅BashFAQ #24) .一个例外是环境变量,它的子进程会获得一个副本。
标签: bash loops awk command-line data-manipulation