我想打印一行中从nth
到last
列的所有列
在文件中输入字符串
vddp vddpi vss cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
命令
cat <file> | awk ' { for (i=3; i<=NF; i++) print $i }'
电流输出
cb0
cb1
cb2
cb3
ct0
ct1
ct2
ct3
所需输出
cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
我正在尝试awk迭代,但无法得到想要的输出
答案1
awk -v n=4 '{ for (i=n; i<=NF; i++) printf "%s%s", $i, (i<NF ? OFS : ORS)}' input
这将采用 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
答案2
没有使用所awk
要求的方法回答您的问题,但我只是指出cut
可以用于此任务。
cut -f4- -d' ' input
答案3
命令
awk '{$1=$2=$3="";print $0}' filename| sed -r "s/^\s+//g"
命令
cb0 cb1 cb2 cb3 ct0 ct1 ct2 ct3
答案4
$1=$2=$3=""
对与以下一起使用的技巧的改进任何 FS
或OFS
,前提是将输出行标准化为$4 OFS $5 OFS ...
可接受:
awk 'BEGIN{p=length(OFS)*3+1} {$1=$2=$3="";print substr($0,p)}'
$1=""
为任何字段(例如或)分配值$1=$1
将导致(整个记录/行)通过将, , ... 字段与变量$0
连接来重建(第一次使用)。$1
$2
OFS
因此将产生设置为 的$1 = $2 = $3 = ""
效果,并且将去掉前导s (请注意,索引从 1 开始)。$0
OFS OFS OFS $4 OFS $5 ...
substr
OFS
awk