Eu tenho um arquivo csv com sete números por linha assim:
1083,20,28,42,23,10,43
1084,20,5,29,59,40,33
1085,39,50,21,12,40,55
1086,45,4,6,23,10,2
1087,36,46,28,32,3,20
Eu quero manter o primeiro número no lugar (coluna 1) e classificar as colunas de 2 a 7, tornando o arquivo como
1083,10,20,23,28,42,43
1084,5,20,29,33,40,59
1085,12,21,39,40,50,55
1086,2,4,6,10,45,23
1087,3,20,28,32,36,46
Como posso fazer isso com awk
, sed
ou qualquer outra coisa?
Obrigado
Com
perl
:Com GNU
awk
:Ou usando a
join.awk
biblioteca (obrigado @WeijunZhou)O problema que você está enfrentando é que você tem arquivos com finais de linha MAC (\r), enquanto os comandos que você está executando estão assumindo finais de linha Unix (\n).
Usar
Perl
:Opções:
-l
defineORS
para\r
= octal 15.-0
defineRS
para\r
= octal 15.-p
fará um loop através do seu arquivo csv por registro. Um registro é separado do arquivo de entrada pelo RS, que é\r
definido pela-0
opção.-F
definirá o separador de campo como vírgula para cada registro à medida que for lido.-a
irá dividir cada registro conforme ele está sendo lido em campos e armazenado em array@F
.Portanto, a saída que você obterá também terá finais de linha MAC. É por isso que você NÃO está vendo sua saída esperada, em vez disso, todos os seus registros de saída aparecem compactados em uma única linha com base em todas as soluções fornecidas aqui.
Para simples
csv
sem citar, tente isto:Tentei com a combinação do método abaixo de awk e sed
j=
awk '{print NR}' filename | sort -nr| sed -n '1p'
resultado