在shell上,当我需要一个特定的列时,我会输入awk.
这打印了第9列,例如:
... | awk '{print $9}'
Run Code Online (Sandbox Code Playgroud)
如何告诉awk打印所有列,包括和列9之后,而不仅仅是第9列?
Ama*_*dan 78
awk '{ s = ""; for (i = 9; i <= NF; i++) s = s $i " "; print s }'
Run Code Online (Sandbox Code Playgroud)
Sie*_*geX 60
当你想要做一系列领域时,awk并没有真正有直接的方法来做到这一点.我建议cut改为:
cut -d' ' -f 9- ./infile
Run Code Online (Sandbox Code Playgroud)
由于默认为选项卡,添加了空间字段分隔符.感谢Glenn指出这一点
Asc*_*rer 51
awk '{print substr($0, index($0,$9))}'
Run Code Online (Sandbox Code Playgroud)
小智 10
sed -re 's,\s+, ,g' | cut -d ' ' -f 9-
Run Code Online (Sandbox Code Playgroud)
而不是处理可变宽度的空白,将所有空格替换为单个空格.然后使用简单cut的感兴趣的字段.
它不使用awk所以不是密切关系,但考虑到其他答案/评论似乎是合适的.
通常perl替换awk/sed/grep等.人,而且是很多更便携(以及刚刚成为一个更好的小刀).
perl -lane 'print "@F[8..$#F]"'
Run Code Online (Sandbox Code Playgroud)
Timtowtdi当然适用.
awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
Run Code Online (Sandbox Code Playgroud)
这会截断给定字段 nr., N 之前的内容,并打印该行的所有其余部分,包括字段 nr.N 并保持原始间距(不会重新格式化)。字段的字符串是否也出现在行中的其他地方并不重要,这是 Ascherer 的答案的问题。
定义一个函数:
fromField () {
awk -v m="\x01" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
$ echo " bat bi iru lau bost " | fromField 3
iru lau bost
$ echo " bat bi iru lau bost " | fromField 2
bi iru lau bost
Run Code Online (Sandbox Code Playgroud)
输出保留所有内容,包括尾随空格 对于 N=0,它按原样返回整行,对于 n>NF 返回空字符串
| 归档时间: |
|
| 查看次数: |
82464 次 |
| 最近记录: |