使用 AWK 打印列?

使用 AWK 打印列?

我每行大约有 7 列,我想打印两个特定列,然后打印最后一个指定列之后的剩余列,例如:

awk -F: {' print $2 ":" $6 '} a.txt

将打印第 2 列和第 6 列a.txt。 6 美元后我如何继续打印剩余的列?

因此输入/输出的示例是:

    column2:column6:column7:column8:column9... 

答案1

您可以改用cutecho 1:2:3:4:5:6:7:8:9:10|cut -d: -f 2,6-

答案2

如果您必须使用,这将满足您的要求awk

$ awk 'BEGIN{FS=":"; OFS=":"}{$1=$3=$4=$5="";gsub("^"FS,"",$0);gsub(FS"+",FS,$0)}1' <your file>
  • 上面的工作原理是通过将所有内容拆分为字段BEGIN{FS=":"; OFS=":"}
  • 然后,通过将字段 1、3、4 和 5 设置为 来清除它们""
  • 这 2 个命令通过删除可能从头开始的gsub任何冒号 () 来清理内容。 := 第二个从 中的剩余字符串中gsub删除任何冒号 () 序列。:$0
  • 最后我们通过1.

答案3

 perl -F: -pale '$"=":"; $_ = "@F[1,5..$#F]"' input-file.txt

 awk -F: '
    {
       a = $2
       for ( i = 6; i <= NF; ++i )
          $(i-5) = $(i)
       NF -= 5
       print a, $0
    }
 ' OFS=":" input-file.txt

 sed -e '
    s/^/:/;s/:/\n/6
    h;s/.*\n//
    x;s/\n.*//
    s/$/:/
    s/^://;s/:/\n/2
    s/^/:/;s/:/\n/2
    s/.*\n\(.*\)\n.*/\1/
    G;s/\n/:/
  '  input-file.txt

答案4

您可以使用for循环从起始索引计数到最后一个索引,并连接一个在末尾打印的变量:

TEST_STRG="column1:column2:column3:column4:column5:column6:column7:column8:column9"
echo $TEST_STRG | awk 'BEGIN {FS=":"} {out=$2; for(i = 6; i <= NF; i++) out = out""FS""$i } END {print out}'
  • out=$2:用第二列初始化变量
  • i <= NF:“NF”是“字段数”->通过分割输入产生的列数
  • out = out""FS""$i:将当前索引处的列连接到字段分隔符“FS”之后的变量

这将导致输出: column2:column6:column7:column8:column9

相关内容