linux - 如何在 linux 中仅选择具有不同标题第一行的所有列中具有相同字符串的那些行

标签 linux shell

我有一个包含 200 列的文本文件,例如:

sample1 0 12 11 23 12
sample2 3 16 89 12 0
sample3 0  0  0  0 0 
sample4 33 22 0  0 0
sample5 0  0  0  0 0

我只想要那些从第 2 列到第 6 列只有 0 的行。所需的输出是:

sample3 0  0  0  0 0 
sample5 0  0  0  0 0

最佳答案

像这样,例如:

$ awk '!$2 && !$3 && !$4 && !$5 && !$6' file
sample3 0  0  0  0 0 
sample5 0  0  0  0 0

这与:

$ awk '!($2 || $3 || $4 || $5 || $6)' file
sample3 0  0  0  0 0 
sample5 0  0  0  0 0

根据您的意见

that is for example but i want to do that from column 2 to 200th

这可以是一种方式:

$ awk '{for (i=2;i<=200;i++) if ($i) {next}}1' file
sample3 0  0  0  0 0 
sample5 0  0  0  0 0

请注意,$i 指的是位置i 中的字段。 $i 在获得“真”值时为真。因此,$i0 时将为假。

基于该方法,我们遍历所有值。如果一个值是 True,表示不是 0,那么我们执行 next,这意味着不再分析该行。对于其余情况(第 2 至 200 列为 0 或为空),next 未完成,因此它解释 1,它使 {print $0} 被执行。

关于linux - 如何在 linux 中仅选择具有不同标题第一行的所有列中具有相同字符串的那些行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20423699/

相关文章:

linux - fedora 中没有 authorized_keys 文件

linux - 如何为运行 Linux 的 MIPS 架构构建 nexe?

java - shell脚本执行中字符串连接错误

linux - 如何使用sed提取分隔符之间的字符?

Linux内核中断处理程序互斥保护?

linux - 向其提供输入后在后台运行 node.js 进程

shell - 终端 - 为什么即使找不到匹配项,grep 的退出命令也是 0?

java - 非交互式 bash shell 的环境变量

linux - scp 命令要求输入密码

ios - 午睡作为 linux 上 SwiftPM 的依赖