【问题标题】:awk + Need to print everything (all rest fields) except $1 and $2awk + ​​需要打印除 $1 和 $2 之外的所有内容(所有剩余字段)
【发布时间】:2011-03-04 01:01:32
【问题描述】:

我有以下文件,我需要打印除$1$2 之外的所有文件,awk

文件:

INFORMATION DATA 12 33 55 33 66 43 
INFORMATION DATA 45 76 44 66 77 33 
INFORMATION DATA 77 83 56 77 88 22
...

理想的输出:

 12 33 55 33 66 43 
 45 76 44 66 77 33 
 77 83 56 77 88 22
...

【问题讨论】:

标签: awk filtering


【解决方案1】:

好吧,鉴于您的数据,cut 应该就足够了:

cut -d\  -f3- infile

【讨论】:

    【解决方案2】:

    虽然与 yael 的预期输出相比,它在每行的开头增加了一个额外的空格,但这里有一个比之前建议的更短、更简单的基于 awk 的解决方案:

    awk '{$1=$2=""; print}'
    

    甚至:

    awk '{$1=$2=""}1'
    

    【讨论】:

    • 如果你想避免前导空格,你可以这样做awk '{$1=$2="";$0=$0;$1=$1}1' file
    【解决方案3】:
    $ cat t
    INFORMATION DATA 12 33 55 33 66 43
    INFORMATION DATA 45 76 44 66 77 33
    INFORMATION DATA 77 83 56 77 88 22
    
    $ awk '{for (i = 3; i <= NF; i++) printf $i " "; print ""}' t 
    12 33 55 33 66 43 
    45 76 44 66 77 33 
    77 83 56 77 88 22 
    

    【讨论】:

    • 即使当前问题比 awk 更简单(见下文),如果您必须对数据进行一些计算,那么了解您的循环非常有用!我的一位同事必须在前两列上执行加法,然后按原样打印其他列:一个简单的 printf 块,然后是你的块就可以了。感谢您的回答(我加了:-))。
    【解决方案4】:

    danbens answer 在结果字符串的末尾留下一个空格。所以正确的做法是:

    awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
    

    【讨论】:

    • awk '{for (i=3; i
    【解决方案5】:

    如果前两个词没有改变,最简单的可能是:

    awk -F 'INFORMATION DATA ' '{print $2}' t
    

    【讨论】:

      【解决方案6】:

      这是另一个awk 解决方案,它比cut 更灵活,并且比其他awk 更短。假设您的分隔符是单个空格(如果不是,请根据需要修改正则表达式):

      awk --posix '{sub(/([^ ]* ){2}/, ""); print}'
      

      【讨论】:

        【解决方案7】:

        如果 Perl 是一个选项:

        perl -lane 'splice @F,0,2; print join " ",@F' file
        

        使用这些命令行选项:
        -n 循环输入文件的每一行,不要自动打印它
        -l 在处理之前删除换行符,然后将它们添加回来
        -a 自动拆分模式 - 将输入行拆分为 @F 数组。默认为空格分割
        -e执行perl代码

        splice @F,0,2@F 数组中干净地删除第 0 列和第 1 列
        join " ",@F 加入 @F 数组的元素,在每个元素之间使用空格

        csv 输入文件的变体:

        perl -F, -lane 'splice @F,0,2; print join " ",@F' file
        

        这使用带有逗号的-F 字段分隔符选项

        【讨论】:

          猜你喜欢
          • 2011-05-11
          • 1970-01-01
          • 2016-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多