【发布时间】:2018-06-28 04:49:58
【问题描述】:
我有一个文件
文件.txt
0005663;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Banana;2018-04-24 15:03:16;Grape;2018-04-24 17:13:17;Grape
0005664;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Avocado;2018-04-24 15:03:16;Orange;2018-04-24 17:13:17;Orange
0005665;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Cherry;2018-04-24 15:03:16;Lemon;2018-04-24 15:14:10;Apple;2018-04-24 15:41:10;Orange;2018-04-24 17:13:17;Orange
0005666;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Banana;2018-04-24 15:03:16;Melon;2018-04-24 16:13:11;Grape;2018-04-24 17:13:17;Grape
0005667;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Melon;2018-04-24 15:03:16;Grape;2018-04-24 17:13:17;Grape
0005668;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Cherry;2018-04-24 15:03:16;Grape;2018-04-24 16:13:11;Grape;2018-04-24 17:13:17;Papaya
我的日志有几个字段,具体取决于客户端创建的路径。它可以有 7、8、9 个字段,也可以是 14 或 16 ... 我需要得到有这条路线的线路:
- 在第三个字段 = Apple
- 在第五个字段 = 香蕉、鳄梨或樱桃
- 前面的第七个字段 = 苹果、葡萄、橙子或柠檬,而不是甜瓜或木瓜
为了让这条路线到达第七个领域,我这样做了
awk -F";" '($3~/Apple/) && ($5~/Banana/ || $5~/Avocado/ || $5~/Cherry/) && ($7~/Apple/ || $7~/Grape/ || $7~/Orange/ || $7~/Lemon/) &&! ($7~/Melon/ || $7~/Papaya/)' file.txt
如何处理第九个字段或第十一个字段...而不必为每个长度编写规则?
输出如下所示:
0005663;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Banana;2018-04-24 15:03:16;Grape;2018-04-24 17:13:17;Grape
0005664;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Avocado;2018-04-24 15:03:16;Orange;2018-04-24 17:13:17;Orange
0005665;2018-04-24 10:14:58;Apple;2018-04-24 10:34:10;Cherry;2018-04-24 15:03:16;Lemon;2018-04-24 15:14:10;Apple;2018-04-24 15:41:10;Orange;2018-04-24 17:13:17;Orange
【问题讨论】:
-
请在您的帖子中也使用代码标签发布预期的输出。
-
您的要求不明确。你是说从 7 开始的所有字段只能包含 Apple、Grape、Orange 或 Lemon?如果是这样,为什么要提到甜瓜或木瓜呢?如果不是,那你在说什么? edit 您的问题包括简洁、可测试的样本输入和预期输出。
-
感谢反馈,重新写了我的问题,现在你明白了吗?
标签: shell awk command-line