Perl abordagem com o uso da função lc()
:
$ perl -lne 'print lc($_)' < input.txt
1 one
2 two two
3 three three three
Abordagem do Python:
$ python -c "import sys;print ''.join([l.lower() for l in sys.stdin])" < input.txt
1 one
2 two two
3 three three three
- envia o arquivo de entrada como
stdin
para o comando python usando <
shell redirection
- usando
sys
ler todas as linhas usando a compreensão da lista (a estrutura l for l in list
), enquanto usa simultaneamente .lower()
method
- a lista de linhas resultante é unida em uma sequência e impressa
Se você quiser remover a nova linha, você pode fazê-lo adicionando uma única vírgula no final do Python 2 (que é o padrão para o comando python
):
$ python -c "import sys;print ''.join([l.lower() for l in sys.stdin])," < input.txt
Para o Python 3, a função de impressão é diferente e tem uma maneira diferente de remover a nova linha - via end
keyword:
$ python3 -c "import sys;print(''.join([l.lower() for l in sys.stdin]),end='')" < input.txt
As abordagens anteriores assumem que a primeira coluna é numérica como no exemplo do OP. Para uma abordagem genérica em que queremos apenas que colunas não-primeiras sejam convertidas, podemos fazer isso em perl:
$ cat input.txt
1 ONE
SOMETHING TWO TWO
$!@# THREE THREE THREE
$ perl -ane 'print $F[0]; print map { " " . lc($_)} @F[1..$#F];print "\n"' < input.txt
1 one
SOMETHING two two
$!@# three three three
Em python por questão de legibilidade, podemos fazer um script:
#!/usr/bin/env python
import sys
for line in sys.stdin:
words = line.strip().split()
case_words = [ word.lower() for word in words[1:] ]
print( " ".join([words[0]]+case_words) )
Que funciona assim com a mesma entrada do exemplo do perl:
$ ./lowercase_columns.py < input.txt
1 one
SOMETHING two two
$!@# three three three