您能解释一下执行此命令'dateA =“ $ dateA”'吗?
awk 'FNR>1 && dateA<=$5' FS='|' dateA="$dateA" "$infile"
awk 'FNR > 1 && dateA <= $5 ' FS='|' dateA="$dateA" "$infile"
FNR
是可变的,为您提供了记录总数,涉及到当前文件,不要变糊涂NR
,FNR
和NR
值将是相同的,只要awk
读取第一个文件,第二个文件,变量FNR
将复位,而NR
不会。这是如何FNR
和NR
作品awk
$ seq 1 5 >file1
$ seq 1 3 >file2
$ cat file1
1
2
3
4
5
$ cat file2
1
2
3
$ awk '{print "Current line : "$0,"File: "FILENAME,"FNR : ",FNR,"NR : ",NR}' file1 file2
Current line : 1 File: file1 FNR : 1 NR : 1
Current line : 2 File: file1 FNR : 2 NR : 2
Current line : 3 File: file1 FNR : 3 NR : 3
Current line : 4 File: file1 FNR : 4 NR : 4
Current line : 5 File: file1 FNR : 5 NR : 5
Current line : 1 File: file2 FNR : 1 NR : 6
Current line : 2 File: file2 FNR : 2 NR : 7
Current line : 3 File: file2 FNR : 3 NR : 8
FNR > 1 && dateA <= $5
如果读取的记录数均不大于1并且变量dateA
小于或等于第5个字段/列,我们将获得布尔值true状态,因此将打印此行
FS='|'
FS
是输入字段分隔符,您也可以将其设置为
awk -F'|' '{ .... }'
要么 awk -v FS='|' '{ .... }'
要么 awk 'BEGIN{FS="|"}{ .... }'
dateA="$dateA"
dateA
是一个awk
变量,其值来自您的shell变量$dateA
,类似地,您可以将其设置为
awk -v dateA="$dateA" '{ .... }'
您上面的命令也可以像下面这样重写
awk -F'|' -v dateA="$dateA" 'FNR>1 && dateA <= $5' "$infile"
有些人喜欢awk 'condition{action}'
更好地阅读,因此您也可以将其写为
awk -F'|' -v dateA="$dateA" 'FNR>1 && dateA <= $5{ print }' "$infile"
^ ^
| |
If this condition is true |
|
Action is to print line,
print or print $0 is same
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句