Você pode usar tail
tail -n +2 input.txt > output.txt
imprimirá as linhas do arquivo a partir do segundo (observe o sinal +)
Eu tenho um arquivo de dados enorme como:
calls...
12311 34213 13344 12345 34532
23345 24445 22445 12344 12333
34456 22211 12334 12234 23344
23345 24445 22445 12344 12333
que eu quero excluir a primeira linha (que é escrita chama ... lá).
Eu usei este comando:
sed '1d' input.txt > output.txt
que exclui "chamadas ...". Mas o problema é que algumas outras linhas são excluídas também. Algum corpo tem alguma outra sugestão que me ajude a apagar chamadas ... sem apagar as outras linhas dentro? meus dados reais tem 117.000 linhas e 10.000 colunas quando eu uso este comando, em seguida, o número de linhas recebe 68.645, enquanto ele deve obter 116.999. Quando eu tento sed em pequenos dados como o exemplo que mostrei aqui, o número de linhas não muda, enquanto nos meus dados reais isso acontece. Estou realmente confuso por quê?
Você também pode usar o comando awk
:
Exemplo 1:
awk '{gsub("^calls\.+", "");print}' input.txt > output.txt
Eliminará linhas de input.txt
e colocará em output.txt
.
Exemplo 2:
awk '!/^calls\.+/{print}' input.txt > output.txt
Isso imprimirá todas as linhas, exceto o padrão fornecido no comando awk
.
Com o GNU sed, você pode usar endereços padrão para limitar seus comandos. Por exemplo:
sed -r '/^calls\.{3}$/d' input.txt
excluirá apenas as linhas que começam com um padrão correspondente.
Eu não fiz muita edição de arquivos tão grandes, mas dado que o sed é planejado como um editor STREAM, pode ser inadequado para o propósito, como se eu entendi corretamente que todo o conteúdo do arquivo terá para ser canalizado através de sed desnecessariamente. Supondo que seja apenas o arquivo com o qual você está lidando e que você não está tentando incorporar esse comportamento em um script complicado, eu simplesmente copio o arquivo de entrada para a saída e uso o vi para remover a primeira linha. O vi funciona melhor do que a maioria dos editores (por exemplo, gedit) em arquivos enormes e isso parece ser um caso em que o vi seria a melhor escolha. (E sim, eu sou um grande fã do vi em primeiro lugar;)
cp input.txt output.txt
vi output.txt
# Within vi, type:
ggddZZ
# gg goes to the first line (if you're not there already); dd deletes
# the line you're on; ZZ saves the file and exits.
# Voila, you're done!