awk+;需要打印除$1和$2之外的所有内容(所有rest字段)

awk+;需要打印除$1和$2之外的所有内容(所有rest字段),awk,filtering,Awk,Filtering,我有以下文件,我需要通过awk 文件: 理想的产出: 12 33 55 33 66 43 45 76 44 66 77 33 77 83 56 77 88 22 ... $cat t 信息数据12 33 55 33 66 43 资料数据45 76 44 66 77 33 信息数据77 83 56 77 88 22 $awk'{for(i=3;i好吧,根据你的数据,削减应该足够了: cut -d\ -f3- infile danbens的答案在结果字符串的末尾留下一个空格。因此正确

我有以下文件,我需要通过
awk

文件:

理想的产出:

 12 33 55 33 66 43 
 45 76 44 66 77 33 
 77 83 56 77 88 22
...
$cat t
信息数据12 33 55 33 66 43
资料数据45 76 44 66 77 33
信息数据77 83 56 77 88 22

$awk'{for(i=3;i好吧,根据你的数据,削减应该足够了:

cut -d\  -f3- infile

danbens的答案在结果字符串的末尾留下一个空格。因此正确的方法是:

awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
awk -F 'INFORMATION DATA ' '{print $2}' t

awk'{for(i=3;i这里有另一个
awk
解决方案,它比
cut
更灵活,比另一个
awk
更短。假设您的分隔符是单空格(如果不是,请根据需要修改正则表达式):


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

awk '{$1=$2=""; print}'
甚至:

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

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

awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
awk -F 'INFORMATION DATA ' '{print $2}' t
如果Perl是一个选项:

perl -lane 'splice @F,0,2; print join " ",@F' file
使用以下命令行选项:
-n
循环输入文件的每一行,不要自动打印它
-l
在处理之前删除换行符,然后将其添加回
-a
autosplit模式–将输入行拆分为
@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
字段分隔符选项

,即使当前问题比awk更简单(见下文),如果你必须对你的数据进行一些计算,那么了解你的循环是非常有用的!我的一位同事必须对前两列执行加法,然后按原样打印其他列:一个简单的printf块,后面跟着你的块就完成了。谢谢你的回答(我加了:-)。awk'{(i=3;如果要避免前导空格,可以执行以下操作:
awk'{$1=$2=”“;$0=$0;$1=$1}1'文件
perl -F, -lane 'splice @F,0,2; print join " ",@F' file