我正在尝试编写一个命令来查找 csv 文件中与模式匹配的特定列的行。我正在为该专栏的模式匹配而苦苦挣扎
任务:打印第 5 列(col5date)为 2022 年 6 月、7 月或 8 月的行
示例 csv 文件:
| 第 1 列 | 列2 | 第 3 列 | 第 4 列 | col5日期 | 第 6 栏 |
|---|---|---|---|---|---|
| A B C D | 阿斯德 | 2022年 | 阿斯德 | 22 年 7 月 4 日 | 某物 |
| A B C D | 阿斯德 | 2022年 | 阿斯德 | 10/9/22 | 某物 |
| A B C D | 阿斯德 | 2022年 | 阿斯德 | 12/12/20 | 某物 |
| A B C D | 阿斯德 | 2020年 | 阿斯德 | 2019 年 9 月 1 日 | 某物 |
| A B C D | 阿斯德 | 2020年 | 阿斯德 | 22年9月1日 | 某物 |
| A B C D | 阿斯德 | 2021年 | 阿斯德 | 2019 年 9 月 22 日 | 某物 |
| A B C D | 阿斯德 | 2021年 | 阿斯德 | 22年2月16日 | 某物 |
| A B C D | 阿斯德 | 2021年 | 阿斯德 | 22年6月16日 | 某物 |
命令后的预期输出:自日期为六月和七月以来的第一行和最后一行。
我的 awk 命令:
cat file | awk -F'|' '$5 ~ /(6|7|8)\/*\/22$/'
Run Code Online (Sandbox Code Playgroud)
在模式中"/(6|7|8)\/*\/22$/",我试图说
m/d/Y - m 是 6、7 或 8
* - 对于第
22 天 $ - 对于年份和列结束
像这样,假设文件是csv(逗号)而不是tsv(制表符)甚至|(管道)分隔的文件:
awk -F, '$5 ~ /^(6|7|8)\/.*\/22$/' file
Run Code Online (Sandbox Code Playgroud)
但您的示例输入中没有匹配的行