gpt4 book ai didi

linux - awk 在变量中的用法

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:15 25 4
gpt4 key购买 nike

actlist 文件包含大约 15 条记录。我想将每一行打印/存储在变量中以执行进一步的操作。脚本运行但 echo $j 显示空白值。有什么问题吗?我的脚本:

#/usr/bin/sh

acList=/root/john/actlist

Rowcount=`wc -l $acList | awk -F " " '{print $1}'`

for ((i=1; i<=Rowcount; i++)); do

j=`awk 'FNR == $i{print}' $acList`

echo $j
done

文件:actlist

cat > actlist

5663233332 2223 2
5656556655 5545 5
4454222121 5555 5
.
.
.

最佳答案

该问题恰好与引号和 shell 插入变量的方式有关。

更具体地说,当你写作时

j=`awk "FNR == $i{print}" $acList`

AWK 代码必须用双引号括起来。如果您希望 shell 能够将 $i 替换为存储在 i 变量中的实际值,则这是必要的。

另一方面,如果你写

j=`awk 'FNR == $i{print}' $acList`

即使用单引号$i 将被解释为文字字符串。

因此固定代码将如下所示:

#/usr/bin/sh

acList=/root/john/actlist

Rowcount=`wc -l $acList | awk -F " " '{print $1}'`

for ((i=1; i<=Rowcount; i++)); do

j=`awk "FNR == $i{print}" $acList`

echo $j
done

记住:始终是 shell 在调用其他命令之前进行变量插值。

话虽如此,在提供的代码中,有些地方可以设计一些改进。但这是另一个故事了。

关于linux - awk 在变量中的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com