Bash 脚本获取从第三列到最后一列的项目并枚举结果

Bash script getting the items from the third column to the last and enumerating the result

我有一个需要从文件中读取的脚本,该文件总是这样构成的:

bench toast pepperoni bacon
fruit berry banana
doom happy winter mountain kiwi

下面的代码,让我从 third 列到文档的 end,所以结果是:

cat file | awk -v n=3 '{ for (i=n; i<=NF; i++) printf "%s%s", $i, (i<NF ? OFS : ORS)}'

pepperoni bacon
banana
mountain kiwi

我的问题是,如何为每个元素实现一个计数变量,以便结果显示为:

(1) pepperoni bacon
(2) banana
(3) mountain kiwi
so on...

使用 GNU userland 工具的一种方式:

$ cut -d' ' -f 3- input.txt | nl -n ln | sed 's/^\([0-9]*\)[[:space:]]*/() /'
(1) pepperoni bacon
(2) banana
(3) winter mountain kiwi

或者,您可以使用打印出 NR 变量的 awk 脚本的变体(或者 FNR 如果您想一次处理多个文件):

$ awk -v n=3 '{
                printf "(%d) ", NR
                for (i=n; i<=NF; i++)
                  printf "%s%s", $i, (i<NF ? OFS : ORS)
              }' input.txt
(1) pepperoni bacon
(2) banana
(3) winter mountain kiwi

(注意删除 Useless Use Of Cat。为了便于阅读,也重新格式化)。

或纯 bash:

$ lines=0 && while read -r -a fields; do printf "(%d) %s\n" "$((++lines))" "${fields[*]:2}"; done < input.txt
(1) pepperoni bacon
(2) banana
(3) winter mountain kiwi