【发布时间】:2022-06-10 17:20:56
【问题描述】:
希望有人可以帮助解释以下awk 输出。awk --version:GNU Awk 5.0.1,API:2.0(GNU MPFR 4.0.2,GNU MP 6.2.0)
操作系统:Windows上的Linux子系统; Linux Windows11x64 5.10.102.1-microsoft-standard-WSL2
用户体验:n00b
重要:在下面的两个代码sn-ps中,唯一的区别是示例#2中NR==FNR后面的分号(;)。
样本 #1
'awk 'NR==FNR { print $0 }' lines_to_show.txt all_lines.txt
输出 #1
2
3
4
5
7
样本 #2
'awk 'NR==FNR; { print $0 }' lines_to_show.txt all_lines.txt
输出#2
2 # 为什么文件 'lines_to_show.txt 中的值出现两次?
2
3
3
4
4
5
5
7
7
线 -01
线 -02
第-03行
第-04行
线 -05
第-06行
第-07行
第-08行
第-09行
第-10行
生成文本输入文件
lines_to_show.txt:echo -e "2\n3\n4\n5\n7" > lines_to_show.txt
all_lines.txt:echo -e "line\t-01\nline\t-02\nline\t-03\nline\t-04\nline\t-05\nline\t-06\nline\t-07\nline\t-08\nline\t-09\nline\t-10" > all_lines.txt
请求/问题:
- 如果您能解释一下为什么您知道以下问题的答案(经验、教程、视频等)。
- 如何阅读“awk”程序?我的印象是分号 ( ; ) 只是一个语句终止符,就像在 C 中一样。它不应该对程序的执行产生影响。
- 在输出 #2 中,为什么文件 'lines_to_show.txt 中的值出现两次?似乎
awk正在打印第一个文件“lines_to_show.txt”中的值,但打印了 10 次,这是文件“all_lines.txt”中的记录数。这是真的?为什么? - 为什么在输出#1 中只显示“lines_to_show.txt”的输出?我以为
awk会处理每个文件中的每条记录,所以我预计会看到 15 行 (10 + 5)。
到目前为止我尝试了什么?
【问题讨论】:
-
这里有一个很棒的教程:grymoire.com/Unix/Awk.html
标签: awk