O redirecionamento StdOut não funciona [duplicado]

0

department.txt contém a coluna como ID, Department Estou usando abaixo para alterar o pedido para Departamento, ID

Masseeuatualizaraindamaisocomandoabaixo

Em seguida, o departamento.txt fica vazio, sem nenhuma saída. Se eu usar algum outro arquivo em vez do mesmo arquivo que estou lendo, então funciona.

Eu entendo que estou lendo e atualizando o mesmo arquivo, mas pelo que eu entendo é | deve cuidar disso, pois internamente ele deve estar armazenando a saída em algum lugar em sua memória e despejando no arquivo que eu pedi. Não é? Alguém pode dar uma ideia de como funciona?

Nota: Eu sei que existem muitas perguntas similares, mas nenhuma delas realmente respondeu como internamente | funciona, que é a questão fundamental para a qual eu preciso de uma resposta.

    
por LoveWithMaths 07.04.2018 / 08:29

1 resposta

0

Não, a tubulação não cuida disso. O pipe não executa os dois comandos sequencialmente e armazena a saída do primeiro na memória. Os dois programas são executados ao mesmo tempo e são conectados usando um dispositivo de E / S especial chamado pipe. Mas antes de iniciar os programas, o shell configura todos os redirecionamentos de E / S, o que significa que ele abre o arquivo de saída e o trunca.

Se você tem o GNU awk, você pode usar o inplace opção para substituir o arquivo de entrada.

gawk -i inplace -F'\.' -v OFS=. '{print $2, $1}' department.txt
    
por 07.04.2018 / 08:43