Arquivo da tag: Shell

Extraindo o último elemento de uma linha com o awk

awk, o mastigador de linhas de texto

awk, o mastigador de linhas de texto

Hoje surgiu a necessidade de manipular, via script (shell), um arquivo texto e pegar o último elemento de uma linha, que é um código. Como a linha de exemplo abaixo:

DISSE0074I Operation successfully submitted. Distribution ID is 1234567890.123456.

No caso eu preciso pegar o código numérico no fim da linha. Geralmente eu usaria apenas o comando cut, como: cut -d’ ‘ -f8, mas e se a mensagem variar de tamanho (quantidade de palavras)? Como saber o índice do último elemento?
Entra em ação o awk. Usando awk ‘{print $8}’ dá pra imprimir o elemento número 8; e há a variável NF que informa a quantidade de campos. Então dá pra extrair o último campo assim:

cat arquivo.txt | awk ‘{print $NF}’

Perfeito para o que eu queria.

Bash Shell Shortcuts

All about Linux: Bash Shell Shortcuts
English version below.
Algumas combinações de teclas úteis para se usar a linha de comando no Linux.
Diga-se de passagem, muitas destas combinações de teclas são parecidas com as usadas no editor de textos Emacs. Por exemplo: para mover o cursor para o começo ou fim da linha usa-se ctrl+a e ctrl+e; para saltar de uma palavra para a outra, alt+b e alt+f; para capitalizar (mudar de minúscula para maiúscula), alt+c e assim por diante.
Mais algumas coisas interessantes sobre o shell: Simplify data extraction using Linux text utilities


Some useful key bindings to use while in Linux command line.
Just as a side comment, some of these bindings are similar to the ones used by the text editor Emacs. For example: to move the cursor to the start or the end of the line, use ctrl+a or ctrl+e; to jump from one word to another, alt+b and alt+f; to capitalize the current word/character use alt+c and so on.
Some more shell goodies: Simplify data extraction using Linux text utilities

Moving files under Unix

English version below.
Em um sistema Unix, para copiar muitos arquivos de um diretório para outro (por exemplo, copiar todos os arquivos de uma partição inteira), o comando cp pode não ser o mais indicado: ele pode ter alguns problemas tratando arquivos incomuns, como por exemplo pipes e dispositivos. Nestes casos, o comando tar pode ser mais indicado.
Por exemplo, para copiar todo o conteúdo do diretório /usr e subdiretórios para /mnt :
cd /usr
tar cfp - ./* |(cd /mnt; tar xvfp -)

O parâmetro p garante que as permissões de arquivo serão copiadas e restauradas. Usar – como nome do arquivo faz com que o tar leia/escreva na entrada/saída padrão ao invés de um arquivo normal. Por fim, chamar o segundo comando dentro de () faz com que este seja executado dentro de um ‘subshell’, recebendo em sua entrada padrão a saída do comando anterior, repassada via pipe.
Retirado do artigo Move an Entire File System on a Live Unix System – OSNews.com


In a Unix system, to copy a large amount of files from one directory to another (say, copying all files in a partition), the cp command may not be the best option: it may have some problems handling uncommon files, like pipes and devices. In this case, the tar command can be a better option.
For example, to copy all files from /usr and subdirectories to /mnt :
cd /usr
tar cfp - ./* |(cd /mnt; tar xvfp -)

The parameter p tells tar to preserve the file permissions. Using – as the file name makes tar to read from standard input or write to standard output, instead of a normal file. And since the second command is being called inside (), it is being runned in a \’subshell\’, receiving in its standard input the output from the previous command, sent to it via pipe.
Taken from the article Move an Entire File System on a Live Unix System – OSNews.com