繁体   English   中英

在 Linux 上显示不包含特定字符串的行

[英]Show lines which does not contain specific string on Linux

我的 Linux 服务器上有一个包含以下字符的文本文件:

  ID              DATA
MF00034657,12435464^DRogan^DPUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;M-DT_MAX_1;
MF00056578,12435464^DRogan^DPUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;PUM-DT_MAX_1234;UM-DT_MAX_123;

现在我需要过滤不包含“PUM-DT_MAX_1234”的行并将它们保存在另一个带有 ID 的文件中。

像这样:

MF00034657,M-DT_MAX_1
MF00056578,UM-DT_MAX_123

我用:

grep -v 'PUM-DT_MAX_1234' file > file.out
awk '!/PUM-DT_MAX_1234/' file > file.out

但它不起作用。

我该如何解决?

用:

awk '$0 !~ /your_pattern/'

正如在(可能)最伟大的AWK 文档中找到的那样。

如果您想删除任何包含“PUM-DT_MAX_1234”的字段,那么您必须遍历行中的每个字段:

awk -F "[;,]" -v OFS="," 'NR==1 { next; }; { for (i=1;i<=NF;i++) { if(!match($i,/.*PUM-DT_MAX_1234.*/) && length($i) > 0) { if (i==1) r=$i;  else r = r OFS $i }}; print r }' filter.txt

在带有注释的更具可读性的视图中:

  • -F "[;,]"设置字段分隔符为; ,
  • -v OFS=","设置输出分隔符为,
  • 'NR==1 { next; }; ' AWK 脚本'开始。 剩下的就是跳过你的文件头(如果记录号是1,停下来跳到下一行
  • { for (i=1;i<=NF;i++) {迭代字段数( NF
  • if(!match($i,/.*PUM-DT_MAX_1234.*/) && length($i) > 0) {如果字段不为空且与文本不匹配
  • if (i==1) r=$i; else r = r OFS $i if (i==1) r=$i; else r = r OFS $i将字段连接到前一个字段(或将其设置为第一个字段以避免在输出中出现前导,
  • print r }'循环结束后,打印前一个连接的结果,并以'结束 AWK 脚本,用于 shell
  • filter.txt最后一个参数是文件名。

OFS是频˚Field小号eparator,这样你就可以通过更改命令行变量改变它。

您的示例的输出:

MF00034657,M-DT_MAX_1
MF00056578,UM-DT_MAX_123

我将使用命令ls来类比您的问题(因为它很容易实现),假设我想显示所有不是mp4文件,您执行以下操作:

ls | awk '! /\.mp4/'

如果您想进一步使用这些选项,我实际上可能正在寻找一个包含mp4扩展名并且确实包含特定字符串的文件,例如abc

ls | awk '! /\.mp4/ &&  /abc/'

这应该类似于并适用于您的目的(或至少,不难实现)。

sed '1b
h;s/.*DRogan^D//;s/PUM-DT_MAX_1234;\{0,1\}//g;s/;$//;/./!d
H;g;s/,.*\n/,/' YourFile
  • 根据您的样品

概念:

  • 保留该行的副本
  • 从线上移除头部和任何“PUM”。 检查是否有东西留下
  • 取回标题(从缓冲行)并使用减少行重新格式化

silgon 的回答中,该命令在我删除了 '! /.mp4/'

  • 我想使用AWK从“docker images”输出中删除“none”图像:

 docker images | awk '!/\\<none>/'

  • 我只想使用 AWK 从“docker images”输出中打印名称和标签,即输出中不包括“none”图像的第 1 列和第 2 列:

 docker images | awk '!/\\<none>/' | awk '{print $1,$2}'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM