【发布时间】:2015-04-26 23:02:13
【问题描述】:
(更新示例和解决方案)数据按第一个字段顺序分组。每个第一个字段的行数是可变的。找到匹配(不受欢迎的关键字)后,需要删除与匹配的第一个字段相同的行。
输入是:
1 orange dog red
1 apple cat green
2 peach frog grey
3 apple lamb white
3 orange lamb white
3 mango cat yellow
3 apple mouse blue
如果匹配“cat”或“orange”,则删除具有相同第一个字段(“1”或“3”)的行。输出将是:
2 peach frog grey
解决方案来自科斯塔斯:
awk 'NR==FNR{if($0~/cat|orange/)L[$1]=1;next} !($1 in L)' test1.txt test1.txt
【问题讨论】:
-
这看起来像是一道作业题。你试过什么了?它必须是一个 awk 解决方案吗?看起来您需要“两次传递”数据,因为在读取所有记录之前您不会知道是否发生匹配。
-
"3 apple mouse blue"为什么不呢? ....因为 3 在第一列 -
我认为是因为
3 mango cat yellow包含不允许的关键字。 -
Awk 是我(几乎不)知道的唯一语言,我尝试只用 awk 完成我的项目。
标签: awk