我有以下文件,我需要按$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
...
答案 0 :(得分:18)
好吧,根据您的数据,切割应该足够了:
cut -d\ -f3- infile
答案 1 :(得分:11)
$ 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
答案 2 :(得分:10)
虽然与yael的预期输出相比,它在每行的开头添加了额外的空间,但这里有一个比以前建议的更短更简单的基于awk的解决方案:
awk '{$1=$2=""; print}'
甚至:
awk '{$1=$2=""}1'
答案 3 :(得分:3)
danbens answer在结果字符串的末尾留下一个空格。所以正确的方法是:
awk '{for (i=3; i<NF; i++) printf $i " "; print $NF}' filename
答案 4 :(得分:2)
如果前两个单词没有改变,最简单的可能是:
awk -F 'INFORMATION DATA ' '{print $2}' t
答案 5 :(得分:0)
这是另一个awk
解决方案,它比cut
解决方案更灵活,并且比其他awk
解决方案更短。假设您的分隔符是单个空格(如果不是,则根据需要修改正则表达式):
awk --posix '{sub(/([^ ]* ){2}/, ""); print}'
答案 6 :(得分:0)
如果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
字段分隔符选项和逗号