Jig*_*dhi 13 awk text-processing
我想打印从nth
到的所有列last
一行列的
vddp vddpi vss cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
Run Code Online (Sandbox Code Playgroud)
cat <file> | awk ' { for (i=3; i<=NF; i++) print $i }'
Run Code Online (Sandbox Code Playgroud)
cb0
cb1
cb2
cb3
ct0
ct1
ct2
ct3
Run Code Online (Sandbox Code Playgroud)
cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
Run Code Online (Sandbox Code Playgroud)
我正在尝试awk迭代,但无法获得所需的输出
jes*_*e_b 14
awk -v n=4 '{ for (i=n; i<=NF; i++) printf "%s%s", $i, (i<NF ? OFS : ORS)}' input
Run Code Online (Sandbox Code Playgroud)
这将取 n 作为值n
并通过最后一个字段循环该数字NF
,对于每次迭代,它将打印当前值,如果这不是行中的最后一个值,它将OFS
在它之后打印(空格),如果是它将ORS
在它之后打印的行上的最后一个值(换行符)。
$ echo 'vddp vddpi vss cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3' |
> awk -v n=4 '{ for (i=n; i<=NF; i++) printf "%s%s", $i, (i<NF ? OFS : ORS)}'
cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
Run Code Online (Sandbox Code Playgroud)
ste*_*eve 12
不使用所awk
要求的方法回答您的问题,但我只是指出cut
可以用于此任务。
cut -f4- -d' ' input
Run Code Online (Sandbox Code Playgroud)
命令
awk '{$1=$2=$3="";print $0}' filename| sed -r "s/^\s+//g"
Run Code Online (Sandbox Code Playgroud)
命令
cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
Run Code Online (Sandbox Code Playgroud)
如果您想保留要保留的字段之间的间距,您不妨这样做:
<file awk '{sub(/^[[:blank:]]*([^[:blank:]]+[[:blank:]]+){3}/, ""); print}'
Run Code Online (Sandbox Code Playgroud)
(但请注意,并非所有awk
实现都支持,{3}
即使它是 POSIX)。
即使用匹配前 3 个字段的正则表达式。
或者简单地sed
用来做到这一点:
<file sed 's/^[[:blank:]]*\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{3\}//'
Run Code Online (Sandbox Code Playgroud)
那些假设输入中的所有行至少有 4 个字段。
在a b c d <tab>e f <nl>
输入上,这将给出d <tab>e f <nl>
输出。