我有一个非常大的文件,如果列值为 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)
我是新来的,我尝试了很多东西,但没有做到。
我该怎么做?
谢谢你的帮助
鉴于问题中的信息我目前可以想出:
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
归档时间: |
|
查看次数: |
360 次 |
最近记录: |