bash - awk 和shell 变量| 使用变化的变量
问题描述
假设我有一个循环(bash shell),结构如下:
for iter in `seq 1 to 5`
do
<bunch of stuff that generates a file called test.dat>
awk -v var="$iter" '{print $1 " " var}' test.dat > mod_test.dat
done
我不太明白为什么 awk 没有写出 $iter 变量的当前值。
例如,test.dat 可能看起来像(比如说)
abcd
efgh
ijkl
mnop
我期待结束
abcd 1
efgh 2
ijkl 3
mnop 4
[基本上,我只是想将循环计数器放在每一行的末尾。]
但是,我的脚本不起作用,因为输出文件(mod_test.dat)很简单
abcd 5
efgh 5
ijkl 5
mnop 5
换句话说,它只是将计数器的最后一个值附加到每一行。我知道计数器正在工作(循环中的 echo $iter 显示它正在递增)。
我做错了什么明显的事情?我已经尝试了所有我知道的技巧来设置 awk 变量(var=$iter, var="$iter", var="$iter"....),但没有成功。我是一个 awk 半新手,所以如果这甚至低于微不足道的水平,我深表歉意。
提前谢谢了。
解决方案
您正在处理文件 5 次。您看到的只是您处理文件的第 5 次,每次之前的迭代都会被下一次覆盖。
awk 可以自己处理:
最简单的:
awk '{print $0, NR}' file
或使用计数器:
awk '{print $0, ++n}' file
- 如果您不想计算空行,您可能想要这样做:$ printf "%s\n" one two "" three "" four five | awk 'NF > 0 {$(NF+1) = ++n} 1' one 1 two 2 three 3 four 4 five 5
推荐阅读
- amazon-web-services - AWS IoT Mosquitto 证书错误
- javascript - 在异步函数中运行并发 HTTP 请求
- javascript - 从 html 运行时 require() 失败,但在直接运行 javascript 时有效
- java - 弹性搜索错误:自定义分析器 [custom_analyzer] 未能在名称 [my_tokenizer] 下找到标记器
- python - 如何使用 `pipenv` 访问 Django 环境变量?
- ios - 斯威夫特:我在“tableView.delegate=self”中得到“Unexpectedly found nil”
- google-apps-script - 如何在谷歌应用脚本中获取发布到网络电子表格的 ID
- google-chrome - Jupyter notebook:指向本地存储的 pdf 文档的超链接在 Chrome 中停止工作
- angular - Angular - 多个 ng 模板分组,并在条件下显示隐藏
- python - 在 python-telegram-bot 中从用户获取实时位置