se eu tiver um arquivo csv no seguinte formato:
column1,column2,column3,column4,column5,column6,column7,column8
e quero awk
imprimir apenas as colunas 2 a 7 que eu usaria:
awk -F',' '{print $2 "," $3 "," $4 "," $5 "," $6 "," $7}' file.csv
e pegue:
column2,column3,column4,column5,column6,column7
existe uma maneira de concatenar as colunas 2-7 para simplificar o comando. Como estou pensando em um arquivo com um pouco mais de colunas, meu awk
comando ficaria terrivelmente longo.
O corte utilitário tem uma notação compacta:
produzindo:
Respondendo ao comentário de @PlasmaBinturong: minha intenção era abordar a questão de uma sequência de chamada curta: "... meu comando awk ficaria terrivelmente longo ...". No entanto, também é possível encontrar códigos que organizam os campos como desejar. Por mais que eu goste de awk, perl, python, muitas vezes achei útil construir um utilitário específico para estender os recursos do *nix padrão. Então, aqui está um trecho de um script de teste, s2, mostrando utilitários recortar e organizar, ambos permitem rearranjo e duplicação, com o arranjo também permitindo intervalos de campo decrescentes:
produzindo resultados a partir destas versões:
O my-recut é uma pequena modificação do código textutils recortado, e o arranjo é a nossa versão de um corte estendido. Mais Informações:
Muitas felicidades ... aplausos, drl
b=número do campo inicial, e=número do campo final. Se você precisar lidar com CSVs com campos entre aspas, vírgulas incorporadas, novas linhas etc., consulte https://stackoverflow.com/q/45420535/1745001 .
Resultados:
Testado com o comando abaixo e funcionou bem
resultado