Dicas para SED e AWK

POST EM CONSTANTE ATUALIZAÇÃO
PARA VER MAIS DICAS, ASSUNTOS E COMANDOS
BUSQUE NA BARRA ACIMA, À ESQUERDA

Manipular bem arquivos e linhas de texto é muito importante, especialmente ao lidar com dados brutos.

ATENÇÃO: dependendo da versão de linux os comandos abaixo podem variar. Foram testados em um FEDORA 7 em diante.


SED mudando a ultima virgula de cada linha mas limitado a ultima linha ($)
sed '$ s:,$:;:g' arquivo.txt

o que era:
4 5 6 7 8 9 1 2 5,
5 8 7 4 5 6 9 5 4,
7 5 8 4 1 2 3 6 8,

vira:
4 5 6 7 8 9 1 2 5,
5 8 7 4 5 6 9 5 4,
7 5 8 4 1 2 3 6 8;

Criando arquivos .keepme (útil para cvs) usando AWK
find DIRWORK -type d -ls | awk '{print "touch "$11"/.keepme"}' > criakeepme.exe

Usando LS e AWK para pegar parametros externos e escrever no GrADS
'!ls -l u_niveis1000_*dat | tail -1 | awk "{print substr(\$9,14,12)}" > prefixo.txt'
prefixo=read('./prefixo.txt')
prefixo=sublin(prefixo,2)
say prefixo
(existem formas melhores, mas dependendo do tipo e tamanho do parâmetro isto é bem útil)

Usando HEAD e AWK para formatar um arquivo usando tabulações (\t), pedaços de strings (substr) e quebras de linha (\n)
head -2 arquivo.txt | awk '{print "X\t"substr($1,7,4)"-"substr($1,1,2)"-"substr($1,4,2)" 00:00:00\n"$2" "$3" "$4" "$5}'

Forma fácil de passar variáveis shell para o AWK
Passando $ano, $mes e $dia
awk -v datafull="20$ano $mes $dia 00 " '{print datafull $1" "$2" "$3" "$4}' arquivo.txt

Somando colunas usando AWK
awk '{for (i=1; i<=NF; i++) { sum[i]+= $i } } END { for (i=1; i<=NF; i++ ) { print "Col[", i, "] =", sum[i] } }'

passa de:
32 0
6 0
21 11
para...
Col[ 1 ] = 59
Col[ 2 ] = 11



awk '{ sum1+=$1; sum2+=$2; } END { print sum1" "sum2 }'

passa de:
32 0
6 0
21 11
para...
59 11




POST EM CONSTANTE ATUALIZAÇÃO
PARA VER MAIS DICAS, ASSUNTOS E COMANDOS
BUSQUE NA BARRA ACIMA, À ESQUERDA

Nenhum comentário: