awk 从第 n 列打印到最后

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)

  • `cut` 期望字段之间只有一个 SPC,并且不会忽略前导和尾随的 SPC,而 `awk` 忽略前导 SPC+TAB(有时是其他的 `[:blank:]`,有时包括换行符,有时是所有的 ASCII ` [:space:]`) 并将一个或多个空格的*序列*视为分隔符。 (8认同)

Pra*_* BS 8

命令

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)

  • `awk '{$1=$2=$3=""; $0=$0;$1=$1; 打印}'文件` (11认同)

Sté*_*las 7

如果您想保留要保留的字段之间的间距,您不妨这样做:

<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>输出。