awk 从第 n 列到最后列打印

awk 从第 n 列到最后列打印

我想打印一行中从nthlast列的所有列

在文件中输入字符串

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=""对与以下一起使用的技巧的改进任何 FSOFS,前提是将输出行标准化为$4 OFS $5 OFS ...可接受:

awk 'BEGIN{p=length(OFS)*3+1} {$1=$2=$3="";print substr($0,p)}'

$1=""为任何字段(例如或)分配值$1=$1将导致(整个记录/行)通过将, , ... 字段与变量$0连接来重建(第一次使用)。$1$2OFS

因此将产生设置为 的$1 = $2 = $3 = ""效果,并且将去掉前导s (请注意,索引从 1 开始)。$0OFS OFS OFS $4 OFS $5 ...substrOFSawk

相关内容