时间:2015-08-11 19:39:41

标签: bash awk sed cut

我有一个文本文件,我想在此之后每3个提取第一列,第二列和一列。另外,我想摆脱第2行。我怎么能用awk或类似的东西呢?

一个例子: 我有一个文本文件:

A B C D E F G H I J .. N (header 1)
A B C D E F G H I J .. N (header 2)
A B C D E F G H I J .. N (row 1)
A B C D E F G H I J .. N (row 2)
A B C D E F G H I J .. N (row n)

我试图将其作为

A B F J .. N (header 1)
A B F J .. N (row 1)
A B F J .. N (row 2)
A B F J .. N (row n)

感谢。

P.S。我尝试过使用How to print every 4th column up to nth column and from (n+1)th column to last using awk?中提到的解决方案,但解决方案对我不起作用

1 个答案:

答案 0 :(得分:2)

$ awk 'NR!=2{out=$1; for (i=2;i<=NF;i+=4) out = out OFS $i; print out}' file
A B F J 1)
A B F J 1)
A B F J 2)
A B F J n)

上面的输出很混乱,因为示例输入中的...和注释使其不可测试。始终发布ACTUAL,可测试的输入/输出,而不是描述或其他抽象表示。并且不要在每一行重复相同的数据,因为这会使输出字段难以映射到输入,因此更难理解您的要求。这将是一个更有用的例子:

$ cat file
101 102 103 104 105 106 107 108 109 110 111
201 202 203 204 205 206 207 208 209 210 211
301 302 303 304 305 306 307 308 309 310 311
401 402 403 404 405 406 407 408 409 410 411

$ awk 'NR!=2{out=$1; for (i=2;i<=NF;i+=4) out = out OFS $i; print out}' file
101 102 106 110
301 302 306 310
401 402 406 410