定期删除列

时间:2014-06-25 20:02:35

标签: linux awk

我有一个包含大约25000列和3,000行的文件。现在从第4列开始,我想以第8列的间隔删除第3-5列,直到结束。

示例:

输入文件

c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20
d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20

现在我想要输出文件

c1 c2 c3 c4 c5 c9 c10 c11 c12 c13 c17 c18 c19 c20
d1 d2 d3 d4 d5 d9 d10 d11 d12 d13 d17 d18 d19 d20

我希望我的问题不是一个令人困惑的问题。我知道如何定期打印,但不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:3)

最简单的方法可能是:

awk '{
printf "%s %s %s", $1, $2, $3
for (i=4; i<=NF; i++)
    if ( ((i-3)%8) !~ /^[345]$/)
        printf " %s", $i
print ""
}' file
c1 c2 c3 c4 c5 c9 c10 c11 c12 c13 c17 c18 c19 c20
d1 d2 d3 d4 d5 d9 d10 d11 d12 d13 d17 d18 d19 d20

可能需要调整数学,但希望你能得到这个想法。