Eu obtenho o resultado esperado. O primeiro comando imprime cada item duas vezes. O segundo comando imprime uma vez.
Isso não é convencional - "alguns" terá o valor zero por padrão, já que é indefinido. $ some é, portanto, $ 0, que representa a linha inteira, então basicamente você está substituindo a linha com o que você encontra em $ 2 quando usa $some=$2
Compare com este resultado:
johan@computer:~$ df|awk '{$some=$2; print}'
1K-blocks
30827524
4041028
1621692
5120
4054228
102400
4054228
60555340
209548784
Por que você não obteria nenhum resultado ou um resultado diferente: espero que o comportamento de usar variáveis não iniciadas seja potencialmente indefinido, pelo menos em alguns sistemas.
No Solaris eu tenho acesso ao awk "padrão", bem como à versão supostamente compatível com POSIX instalada em / usr / xpg4 / bin / awk. Ambos produzem o mesmo resultado para o seguinte
Eles produzem resultados variados dependendo se eu adiciono print "hello" na frente ou não, e se eu substituo o último comando por "print" (em vez de print $ some) ou não.
Todos eles imprimem ALGO, não em branco, embora - não consegui encontrar uma versão que reproduza esse efeito.
Então, espero que isso seja algum tipo de comportamento indefinido devido ao uso de uma variável não inicializada - você está atribuindo um valor a uma coluna, que está potencialmente muito além do fim do possível intervalo de colunas no fluxo de entrada. $ some refere-se a uma coluna identificada pelo valor de "some"
Você deve usar apenas "alguns" como variável, por exemplo
df | awk '{print "hello";some=$2; print some}'