删除相同的列值

Joh*_*ohn 6 scripting

我有一个非常大的文件,如果列值为 9,我想删除。

样本:

我的文件值是这样的:

1 5 8 3 5 9 5 7 6 9
2 5 7 4 2 9 7 6 3 1
5 9 7 4 1 9 5 7 9 1
Run Code Online (Sandbox Code Playgroud)

我想删除所有行上的值为 9 的任何列(我的列大小非常大,然后我无法检查第一列 = 9 第二列 = 9 ...等)。我需要一个动态脚本。

输出应该是这样的:

1 5 8 3 5 5 7 6 9
2 5 7 4 2 7 6 3 1
5 9 7 4 1 5 7 9 1
Run Code Online (Sandbox Code Playgroud)

我是新来的,我尝试了很多东西,但没有做到。

我该怎么做?

谢谢你的帮助

Lam*_*ert 0

鉴于问题中的信息我目前可以想出:

awk '{for (i=1; i<NF; i++){ a[i]+=$i; b[i]=b[i]" " $i}} END{for (i=1; i<NF; i++) if (a[i]/NR!=9) {printf "%s\n", b[i]}}' same-column-values

该函数遍历文件,将总和计算到变量“a”中,并将该值附加到索引数组“b”中。完全读取文件后,将迭代总和数组,如果总和除以记录数 (NR) 不等于 9,则打印数组“b”中的相应行。

这让我得到一个输出 1 2 5 5 5 9 8 7 7 3 4 4 5 2 1 5 7 5 7 6 7 6 3 9

这样做的缺点是输出应该从上到下读取,并且应该从上到下转换为左到右。

或者,您可以使用以下命令获取仅包含值 9 的列列表:

awk '{for (i=1; i<NF; i++){ a[i]+=$i; b[i]=b[i]" " $i}} END{for (i=1; i<NF; i++) if (a[i]/NR==9){print i; }}' same-column-values