Bash:用连续列表替换列中的数字列表

时间:2013-12-09 06:26:23

标签: bash sed awk

我需要用序列号列表替换第一列数字。该文件看起来像:

 1     the   quick   brown     fox   jumps    over  
 7     the    lazy     dog     the   quick   brown
13     fox   jumps    over     the    lazy     dog
26     the   quick   brown     fox   jumps    over
31     the    lazy     dog     the   quick   brown

我需要:

 1     the   quick   brown     fox   jumps    over  
 2     the    lazy     dog     the   quick   brown
 3     fox   jumps    over     the    lazy     dog
 4     the   quick   brown     fox   jumps    over
 5     the    lazy     dog     the   quick   brown

任何使用bash / sed / awk的解决方案都将受到赞赏。

2 个答案:

答案 0 :(得分:4)

使用awk

awk '$1=NR' OFS="\t" file
1       the     quick   brown   fox     jumps   over
2       the     lazy    dog     the     quick   brown
3       fox     jumps   over    the     lazy    dog
4       the     quick   brown   fox     jumps   over
5       the     lazy    dog     the     quick   brown

由于NR总是大于0的数字,因此始终为真并打印 您可以使用'{$1=NR}1{$1=NR;print $0}来提高其可读性。

答案 1 :(得分:0)

尝试使用awk变量NR,它会为您提供正在处理的记录号 如果您想要asample代码,请参阅以下内容:
假设文件有这样的记录

1 ask
5 rup
6 dd


现在运行以下命令:

 awk '{ print NR FS $2 }' filename


输出:

1 ask
2 rup
3 dd


休息我留给你弄清楚