如何将使用awk的序列号添加到任何输入文件?
假设我在文件名Details.txt中有以下数据:如何将使用awk的序列号添加到任何输入文件?,awk,sequence,Awk,Sequence,假设我在文件名Details.txt中有以下数据: 0154 Raghav Sharma 26 Indore 0159 rakh patid 24 Pune 0159 rakh patid 24 Pune 0018 sai kanak 28 mumbai 0159 rakh patid Pune 0159 sarak jatid Pune 现在我已应用以下awk命令生成4位序列号: awk 'BEGIN{a=1;OFS=" "}/^/{$1=s
0154 Raghav Sharma 26 Indore
0159 rakh patid 24 Pune
0159 rakh patid 24 Pune
0018 sai kanak 28 mumbai
0159 rakh patid Pune
0159 sarak jatid Pune
现在我已应用以下awk命令生成4位序列号:
awk 'BEGIN{a=1;OFS=" "}/^/{$1=sprintf("%04d",a);++a;print $0; next;}{print $0}' Details.txt
输出:
0001 0154 Raghav Sharma 26 Indore
0002 0159 rakh patid 24 Pune
0003 0159 rakh patid 24 Pune
0004 0018 sai kanak 28 mumbai
0005 0159 rakh patid Pune
0006 0159 sarak jatid Pune
最后两行的格式被破坏。请建议一种方法,以便
可以保持正确的格式和正确的序列号
$ # nl command is more apt for numbering files
$ nl -s' ' --number-format=rz -w4 ip.txt
0001 0154 Raghav Sharma 26 Indore
0002 0159 rakh patid 24 Pune
0003 0159 rakh patid 24 Pune
0004 0018 sai kanak 28 mumbai
0005 0159 rakh patid Pune
0006 0159 sarak jatid Pune
$ # with awk, leaving this as an alternate to printf solution
$ awk '{sub(/^/, sprintf("%04d ",++c))} 1' ip.txt
0001 0154 Raghav Sharma 26 Indore
0002 0159 rakh patid 24 Pune
0003 0159 rakh patid 24 Pune
0004 0018 sai kanak 28 mumbai
0005 0159 rakh patid Pune
0006 0159 sarak jatid Pune
- 在此处使用
在行首插入文本sub
- 更改
将强制使用$1
重新对齐OFS
,而$0
将保持其余内容不变子
- 这个特殊的问题恰好可以用这个简单的技巧来解决。通常,如果您有
gawk
- 更改
默认情况下,未初始化变量将在数值上下文中为sprintf(“%04d”,++c))
(或者只使用0
,如其他答案所示)NR
打印1
$0
- 在此处使用
在行首插入文本sub
- 更改
将强制使用$1
重新对齐OFS
,而$0
将保持其余内容不变子
- 这个特殊的问题恰好可以用这个简单的技巧来解决。通常,如果您有
gawk
- 更改
默认情况下,未初始化变量将在数值上下文中为sprintf(“%04d”,++c))
(或者只使用0
,如其他答案所示)NR
打印1
$0
- 您希望避免重新计算$0;如果这样做,多个空间将压缩为单个空间:
$ cat Details.txt
0154 Raghav Sharma 26 Indore
0159 rakh patid 24 Pune
0159 rakh patid 24 Pune
0018 sai kanak 28 mumbai
0159 rakh patid Pune
0159 sarak jatid Pune
$ gawk '{printf "%04d %s\n", NR, $0}' Details.txt
0001 0154 Raghav Sharma 26 Indore
0002 0159 rakh patid 24 Pune
0003 0159 rakh patid 24 Pune
0004 0018 sai kanak 28 mumbai
0005 0159 rakh patid Pune
0006 0159 sarak jatid Pune
您希望避免重新计算$0;如果这样做,多个空间将压缩为单个空间:
$ cat Details.txt
0154 Raghav Sharma 26 Indore
0159 rakh patid 24 Pune
0159 rakh patid 24 Pune
0018 sai kanak 28 mumbai
0159 rakh patid Pune
0159 sarak jatid Pune
$ gawk '{printf "%04d %s\n", NR, $0}' Details.txt
0001 0154 Raghav Sharma 26 Indore
0002 0159 rakh patid 24 Pune
0003 0159 rakh patid 24 Pune
0004 0018 sai kanak 28 mumbai
0005 0159 rakh patid Pune
0006 0159 sarak jatid Pune
很好地使用了
NR
。。。我没有正确地阅读这个问题:-/很好地使用了NR
。。。我没有正确阅读问题:-/