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
我有一个需要从文件中读取的脚本,该文件总是这样构成的:
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