首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用awk打印选定的连续列和随机列

如何使用awk打印选定的连续列和随机列
EN

Stack Overflow用户
提问于 2015-08-05 14:17:08
回答 4查看 187关注 0票数 2

我想从ifile.txt打印1到10列,23列和27列。我可以使用以下命令打印第一到第十列

代码语言:javascript
复制
awk '{n=10; for (i=1;i<=n;i++) printf "%f ", $i; print "";}' ifile.txt

但是我不能把23和27列加进去。

我已经尝试了以下建议,但仍然存在一些问题。例如,我的ifile.txt是:

代码语言:javascript
复制
ifile.txt
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

当我使用下面的代码时

代码语言:javascript
复制
#!/bin/bash
awk '{
n=10
for (i=1; i<=n; i++)
    a[$i]
a[$23]
a[$27]
for (k in a)
    printf "%5.1f", k, FS
print ""
}' ifile.txt

它给了我们

代码语言:javascript
复制
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0
4.0 27.0  5.0  6.0  7.0  8.0  9.0 10.0 23.0  1.0  2.0  3.0

当我使用

代码语言:javascript
复制
cut -d ' ' -f1-10,23,27 ifile.txt

它给了我们

代码语言:javascript
复制
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26
1 2 3 4 5 6 7 8 9 22 26

我可以理解这一点,并通过修改来解决

代码语言:javascript
复制
cut -d ' ' -f2-11,24,28 ifile.txt

这里的问题是在每个开始之前都有一个空格。但我想知道一种通用的方法,这样它就不会看到开头的空格。

EN

回答 4

Stack Overflow用户

发布于 2015-08-05 14:18:57

我假设您的字段以空格分隔。

您可以尝试使用cut

代码语言:javascript
复制
cut -d ' ' -f1-10,23-27 yourfile

说明:

代码语言:javascript
复制
-d - Delimiter

-f - Fields
票数 1
EN

Stack Overflow用户

发布于 2015-08-05 14:41:12

代码语言:javascript
复制
$del=' '
cut -d "$del" -f1-10,23,27 file
票数 1
EN

Stack Overflow用户

发布于 2015-08-05 16:18:30

为了避免重复使用printf,您可以构建一个包含所有所需字段的数组,并循环遍历每个字段。

代码语言:javascript
复制
{
    n=10
    for (i=1; i<=n; i++)
        a[$i]
    a[$23]
    a[$27]
    for (k in a)
        printf "%f%s", k, FS
    print ""
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31824731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档