簡體   English   中英

如何使用AWK打印選定的連續列和隨機列

[英]How to print selected continous and random columns using awk

我想從ifile.txt打印第1至第10列,第23列和第27列。 我可以使用打印第一列到第十列

awk '{n=10; for (i=1;i<=n;i++) printf "%f ", $i; print "";}' ifile.txt

但是我無法在其中添加第23和27列。

我嘗試了以下建議,但仍然存在一些問題。例如,我的ifile.txt是:

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

雖然我使用以下

#!/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

它給

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

而當我使用

cut -d ' ' -f1-10,23,27 ifile.txt

它給

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

我可以理解這一點,並通過修改來解決

cut -d ' ' -f2-11,24,28 ifile.txt

問題在於這里是每個開始之前的空間。 但是我想知道一種通用的方式來做到這一點,這樣它就不會看到開始的空間。

我認為您的字段用空格分隔。

您可以嘗試cut

cut -d ' ' -f1-10,23-27 yourfile

說明:

-d - Delimiter

-f - Fields
$del=' '
cut -d "$del" -f1-10,23,27 file

為了不重復使用printf ,您可以構建一個包含所有所需字段的數組,然后遍歷每個字段。

{
    n=10
    for (i=1; i<=n; i++)
        a[$i]
    a[$23]
    a[$27]
    for (k in a)
        printf "%f%s", k, FS
    print ""
}

在Perl中,您可以嘗試

perl -lane '@F = split ();   print join(" ",@F[0..9,22..26])' input_file > output_file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM