Bash逗号分隔列表提取最后一列

时间:2017-04-17 20:49:23

标签: regex bash

我在bash的txt文件中有一个逗号分隔的列表,如下所示:

name1,org2,enabled,email
name2,org1,enabled,email
name3,org3,enabled,
name4,org4,enabled,email
name5,org5,enabled,

我想要一个命令来提取丢失电子邮件的人的行,这是什么命令呢?感谢

awk -<Flag> <don't know the syntax>

4 个答案:

答案 0 :(得分:3)

在awk中:

$ awk -F, '$4==""' file
name3,org3,enabled,
name5,org5,enabled,
  • -F,定义FS,输入文件分隔符
  • $4==""输出第4个字段为空的记录

grep

$ grep ",$" file
name3,org3,enabled,
name5,org5,enabled,
  • ,$返回最后一个字段为空的记录

答案 1 :(得分:1)

我认为你的文件包含如下行:
name1,org2,enabled,email@domain.com name1,org2,enabled,email

基于此,您可以使用grep -v(反转),即:

grep -v '@' file

输出:

name3,org3,enabled,
name5,org5,enabled,

答案 2 :(得分:1)

这可能是类似于以下代码的awk命令:

awk -F, '$4 == ""'

此代码假定:

  1. 每一行都是逗号分隔的字符串
  2. 第4个字段可能为空
  3. 如果项目2为真,则打印整行
  4. 编辑: 早期我与!$4分享了较短的方式。但这个方法并不好。有关详细信息,请查看我的帖子中的评论中的讨论。

答案 3 :(得分:0)

grep 方法:

grep -Eo '([^[:space:]]*,){3}$' file

输出:

name3,org3,enabled,
name5,org5,enabled,

sed 方法:

sed -n '/\(\S*,\)\{3\}$/p' file