
Estou analisando um arquivo e uso o awk para obter o primeiro e o terceiro campo.
Tudo isso é bom; mas no primeiro campo eu gostaria de cortar os últimos 4 caracteres dessa string; até agora não encontrei uma maneira de fazer isso no awk, e a única maneira de fazer isso é fazer várias chamadas, então salvei a saída do awk em 2 variáveis e, em seguida, cortei a primeira string.
Existe uma maneira mais eficiente de fazer isso? Esta é a aparência do arquivo
abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod
Isso é o que eu executo no loop
echo $output | awk -F, "{print $1, $3}"
Isso imprimirá a linha corretamente, mas quero cortar $1, removendo os últimos 4 caracteres
Responder1
Um método é usar substr
a função do awk. Por exemplo, começando com esta entrada:
$ cat input
abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod
Podemos imprimir as colunas um e três, omitindo os últimos quatro caracteres da coluna um com:
$ awk -F, '{print substr($1, 1, length($1)-4), $3}' input
abcdefghi xyz
riosadsef eis
baifafsag eod