如何在 awk 中对两侧的变量字符串进行字符串比较?

如何在 awk 中对两侧的变量字符串进行字符串比较?

作为一个跟进我之前的问题,当文档中两边都有可变字符时,如何进行类似的字符串比较?

举个例子:

# test,date
"test1","27 March 2024 01:37 PM UTC"
"test2","13 April 2024 07:08 AM UTC"
"test4","13 April 2024 07:09 AM UTC"
"test5","13 April 2024 07:10 AM UTC"
"test6","13 April 2024 07:12 AM UTC"

将如何之前的回答:

awk -F, -v date="$(date +'%B %Y')\"$" '/^[^#]/ && $2 ~ date{print $1}'

是否修改为打印本月(撰写本文时为 2024 年 4 月)起的所有测试?

答案1

awk -F, -v date="$(date +'%B %Y')\"$"

正在创建一个April 2024"$存储在变量中的正则表达式date。这与您的新输入不匹配,因此只需将其调整为通过更改\"$[^\"]*\"$或您喜欢的任何其他匹配正则表达式来匹配的正则表达式,例如:

$ awk -F, -v date="$(date +'%B %Y')[^\"]+\"$" '/^[^#]/ && $2 ~ date{print $1}' file
"test2"
"test4"
"test5"
"test6"

或者可能更稳健,取决于第二个字段中可以包含哪些其他值:

$ awk -F, -v date="$(date +'%B %Y') [0-9]{2}:[0-9]{2} [AP]M [[:upper:]]+\"$" '/^[^#]/ && $2 ~ date{print $1}' file
"test2"
"test4"
"test5"
"test6"

相关内容