Re: Sorting elements *and* knowing where each one has been put
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
"Boyd Stephen Smith Jr." <bss@iguanasuicide.net> writes:
> In <[🔎] 87mxzvg816.fsf@merciadriluca-station.MERCIADRILUCA>, Merciadri Luca wrote:
>>"Boyd Stephen Smith Jr." <bss@iguanasuicide.net> writes:
>>> nl values | sort -k2 | nl | grep value_i
>>>
>>> The first column is the new location, 1-based. The second column is the
>>> old location, 1-based. If your values are numbers, you might use (awk '$3
>>> == value_i') instead of the grep.
>>>
>>> nl = O(n)
>>> sort = O(n lg n)
>>> grep = O(n)
>>>
>>> The whole pipeline is therefore O(n lg n).
>>
>>Would not something like
>>
>>==
>>cat file.txt | awk -F" " '{ print $0,$(
>>for ((i = 1; i < n + 1; i++))
>>do
>>echo $i
>>done
>>) }'
>>==
>>do the trick, file.txt being a text file such as
>>
>>==
>> 20 Jan 2010 17:39:42
>> .
>> .
>> .
>>==
>
> Why don't you just test your code?
>
> I don't think that awk program does what you want though.
>
> My pipeline will work on any data values without whitespace. If you need to
> handle whitespace, add -f "$(printf '\t')" to the sort command-line, which
> should handle everything but tabs and newlines. If you also need to handle
> tabs, you can probably use -k 2,9999 instead of -k2 on the sort command-line.
You are right. Your solution is nice, effectively. Thanks.
- --
Merciadri Luca
See http://www.student.montefiore.ulg.ac.be/~merciadri/
- --
Don't try to teach a pig to sing. It doesn't work, and you'll annoy
the pig.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Processed by Mailcrypt 3.5.8 <http://mailcrypt.sourceforge.net/>
iEYEARECAAYFAktkYOkACgkQM0LLzLt8MhwgAgCglMQJEdaQaELlXUTomWXZ3+bq
Co0AnA+pUTc2Qp3xX3bp5hzvM4xomRKb
=T8PI
-----END PGP SIGNATURE-----
Reply to: