如何自动为大列表添加增量数字?

时间:2014-11-14 09:26:12

标签: linux awk sed

我有一个像以下

这样的大清单
Afghanistan
Albania
Algeria
Andorra
Angola
.
.

如何使用某些Linux实用程序自动生成列表,而无需手动执行?

["Afghanistan",1],
["Albania",2],
["Algeria",3],
["Andorra",4],
.
.

使用sublime文本搜索^(.*)$并替换["\1",],我能够获得以下内容

["Afghanistan",],
["Albania",],
["Algeria",],
["Andorra",],
.
.

如何添加编号?

3 个答案:

答案 0 :(得分:4)

这个awk:

$ awk '{ print "[\"" $0 "\","++var"]," }' file
["Afghanistan",1],
["Albania",2],
["Algeria",3],
["Andorra",4],
["Angola",5],
  • 它在每行前面加["
  • 它会为每一行添加", +变量+ ],"

通过说++variable,我们使变量值从1开始打印,然后从文件末尾开始打印。如果您想从另一个号码开始,您可以声明之前的值:

$ awk -v var=5 '{ print "[\"" $0 "\","++var"]," }' file
["Afghanistan",6],
["Albania",7],
["Algeria",8],
["Andorra",9],
["Angola",10],

答案 1 :(得分:2)

在awk中这样的事情如何:

awk '{printf "[\"%s\",%d],\n", $0, NR}' file

这只是处理文件的每一行,并以您需要的格式包装它。 NR是一个特殊变量,对应于当前记录(行)编号。

使用printf(我忘了!)要记住的一件事是你必须手动追加换行符"\n" ...如果可移植性是一个问题,你可以使用特殊变量{{1 (输出记录分隔符),它应对应于您平台上的换行符:

ORS

如果您使用awk '{printf "[\"%s\",%d],%s", $0, NR, ORS}' file 并自己连接字符串(如fedorqui has done),则会自动附加输出记录分隔符,因此您无需担心这些事情。

答案 2 :(得分:0)

尝试下面的awk,

awk '{print "[\""$0"\","NR"],"}' filename