Estou tentando remover as duas primeiras colunas (nas quais não estou interessado) de um arquivo de log DbgView. Não consigo encontrar um exemplo que imprima da coluna 3 em diante até o final da linha. Observe que cada linha possui um número variável de colunas.
linux
shell
unix
multiple-columns
Amit G
fonte
fonte
Respostas:
... ou uma solução mais simples:
cut -f 3- INPUTFILE
basta adicionar o delimitador correto (-d) e você terá o mesmo efeito.fonte
fonte
awk '{for(i=3;i<=NF;++i)printf $i""FS ; print ""}'
(printf
não imprimirá o caractere de nova linha, masprint ""
adicionarei a nova linha depois que os outros campos forem impressos)echo $(seq 1 10) | awk '{for (i=3; i<=NF; i++) printf $i FS}'
, o que dá:3 4 5 6 7 8 9 10
.solução encontrada aqui:
http://www.linuxquestions.org/questions/linux-newbie-8/awk-print-field-to-end-and-character-count-179078/
fonte
A resposta de Jonathan Feinberg imprime cada campo em uma linha separada. Você pode usar
printf
para reconstruir o registro para saída na mesma linha, mas também pode simplesmente mover os campos um salto para a esquerda.fonte
NF
não é permitido pelo POSIX.NF
pode ser diminuído.NB: este método deixará "espaços em branco" em 1,2,3 campos, mas não é um problema se você quiser apenas olhar a saída.
fonte
1
? com qual palavra-chave devo pesquisarawk
?{$1=$2=$3="";$0=$0;$1=$1}1
Se você quiser imprimir as colunas após o terceiro, por exemplo, na mesma linha, você pode usar:
Por exemplo:
Vai imprimir:
Como podemos ver, o holerite mesmo com espaço, aparece na linha correta.
fonte
Que tal a seguinte linha:
Com base na sugestão de @ ghostdog74. O meu deve se comportar melhor quando você filtra linhas, ou seja:
fonte
sed 's/\s\+//g'
no final do comando para cortar espaços à esquerdaIsso corta o que está antes do campo especificado nr., N, e imprime todo o resto da linha, incluindo o campo nr.N e mantém o espaçamento original (não reformata). Não importa se a string do campo aparece também em algum outro lugar da linha, que é o problema com a resposta de daisaa.
Defina uma função:
E use-o assim:
A saída mantém tudo, incluindo espaços à direita
Funciona bem para arquivos onde '/ n' é o separador de registro, então você não tem aquele caractere de nova linha dentro das linhas. Se você quiser usá-lo com outros separadores de registro, use:
por exemplo. Funciona bem com quase todos os arquivos, desde que não usem hexadecimal char nr. 1 dentro das linhas.
fonte
O seguinte comando awk imprime os últimos N campos de cada linha e no final da linha imprime um novo caractere de linha:
Encontre abaixo um exemplo que lista o conteúdo do diretório / usr / bin e, em seguida, contém as últimas 3 linhas e, em seguida, imprime as últimas 4 colunas de cada linha usando awk:
fonte
Primeiro você encontra a posição do início da terceira coluna. Com substr você imprimirá toda a linha ($ 0) começando na posição (neste caso a) até o final da linha.
fonte
Bem, você pode obter facilmente o mesmo efeito usando uma expressão regular. Presumindo que o separador seja um espaço, seria semelhante a:
fonte
awk '{ sub(/([^ ]+ +){2}/, ""); print }'
que tira o padrão duas vezes.fonte
Solução Perl:
Estas opções de linha de comando são usadas:
-n
faça um loop em cada linha do arquivo de entrada, não imprima automaticamente todas as linhas-l
remove novas linhas antes do processamento e as adiciona de volta depois-a
modo autosplit - divide as linhas de entrada no array @F. O padrão é divisão em espaços em branco-e
execute o código perlsplice @F,0,2
remove claramente as colunas 0 e 1 da matriz @Fjoin " ",@F
junta os elementos da matriz @F, usando um espaço entre cada elementoSe o seu arquivo de entrada for delimitado por vírgulas, em vez de delimitado por espaço, use
-F, -lane
Solução Python:
python -c "import sys;[sys.stdout.write(' '.join(line.split()[2:]) + '\n') for line in sys.stdin]" < file
fonte
Um pouco tarde aqui, mas nenhuma das opções acima pareceu funcionar. Tente isso, usando printf, insere espaços entre cada um. Eu escolhi não ter nova linha no final.
fonte
imprime registros começando do 4º campo ao último campo na mesma ordem em que estavam no arquivo original
fonte
No Bash, você pode usar a seguinte sintaxe com parâmetros posicionais:
Saiba mais: Manipulação de parâmetros posicionais no Bash Hackers Wiki
fonte
Se for apenas para ignorar os dois primeiros campos e se você não quiser um espaço ao mascarar esses campos (como algumas das respostas acima fazem):
fonte
As duas primeiras colunas são apagadas,
sed
remove os espaços iniciais.fonte
Em AWK, as colunas são chamadas de campos, portanto, NF é a chave
todas as linhas:
apenas primeira linha:
fonte