Before raising the flag I tried couple of things but didn't get the desired result.
I have many text files which I want prefixed with custom numbering;
the first 2 lines should be prefixed 00A: , 00B:
and remaining lines should be incremental, like 001: ,002: ,003: , and so on
Presently, I use this command for incremental numbering
awk '{printf("%03d: %s\r\n", NR,$0)}' file1.txt > file2.txt
*which does the incremental nos. ok for the whole file; but not the multiple types needed.
Example Input file:
136725A6449C5279 933FB466C9CD699B
8FFBBA87E9D3209A AB41FBDC5E281A92
FF80DA7B0054FB29 006BF1C82C75C341
FA118264221B02A7 81E9A1FEB75FFB3D
31AA9FC566C3ADE0 70DDFD6DED2BF29C
F0B39014DA7FA6B1 77401108A81E33E1
74EF54060BC2B72F B5518D896DDC266F
DE10C97F9FBDA5A6 6C79566CA1BDC06E
Desired Output:
00A: 136725A6449C5279 933FB466C9CD699B
00B: 8FFBBA87E9D3209A AB41FBDC5E281A92
001: FA118264221B02A7 81E9A1FEB75FFB3D
002: 31AA9FC566C3ADE0 70DDFD6DED2BF29C
003: F0B39014DA7FA6B1 77401108A81E33E1
004: 74EF54060BC2B72F B5518D896DDC266F
005: DE10C97F9FBDA5A6 6C79566CA1BDC06E
Neither Awk nor sed
does this very well, but Perl has it built in.
perl -pe 'BEGIN { $prefix = "A"; }
$prefix = "1" if ($. == 3);
printf "%03s: ", $prefix++;' file
The crucial feature here is that in Perl, "A"++
produces "B"
, natively. It doesn't work so well with leading zeros, though; so I resorted to padding here.
Your question is rather unclear as to what should happen after 00Z
or after 009
so I had to guess. For what it's worth, in Perl, "Z"++
is "AA"
.
If you really insist on an Awk solution, it can be done with something like this:
awk '{ printf("%03s: %s\n", (NR == 1 ? "A" : \
(NR == 2 ? "B" : NR-2)), $0)}' file
I took out the fugly \r
; if you are on Windows, maybe put it back (or consider your options).
As noted in comments, this works on MacOS / nawk
but might not on other Awks.