AWK中特定命令的说明

麦克风

您能解释一下执行此命令'dateA =“ $ dateA”'吗?

awk 'FNR>1 && dateA<=$5' FS='|' dateA="$dateA" "$infile"

阿克塞·黑格
awk 'FNR > 1 && dateA <= $5 ' FS='|' dateA="$dateA" "$infile"
  • FNR是可变的,为您提供了记录总数,涉及到当前文件,不要变糊涂NRFNRNR值将是相同的,只要awk读取第一个文件,第二个文件,变量FNR将复位,而NR不会。

这是如何FNRNR作品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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章