awk '{print $1, $2, "1"}' inputfile
Eu tenho vários arquivos de texto contendo 12 linhas e 3 colunas.
Exemplo:
2 6 0.74
42 6 0.58
80 6 0
112 6 0.24
132 6 1
216 6 0.7
342 6 0
390 6 0.21
432 6 0.56
466 6 0.75
524 6 0.6
646 6 0.9
Eu quero definir todos os valores da terceira coluna para 1 em todas as linhas.
A saída deve ficar assim:
2 6 1
42 6 1
80 6 1
112 6 1
132 6 1
216 6 1
342 6 1
390 6 1
432 6 1
466 6 1
524 6 1
646 6 1
Alguém sabe um comando que pode resolver este problema?
awk '{print $1, $2, "1"}' inputfile
tente
awk '{$3=1 ; print ;}' oldfile > newfile
$3 = 1
irá definir o terceiro campo para 1 sed
com sua opção -i
para edição no local) sed -i 's/[0-9.]*$/1/' file
[0-9.]*$
é uma sequência de 0
a 9
e .
até o final da linha. sed -i 's/[^ ]*$/1/' file
[^ ]*$
qualquer caractere que não seja espaço, até o final da linha. As linhas em sua saída esperada parecem terminar em dois caracteres de espaço e ter campos separados por uma tabulação e um caractere de espaço.
Se é realmente o que você quer, então você precisa:
awk -v 'OFS=\t ' '$3="1 "' < infile > outfile
Ou com sed
:
tab=$(printf '\t')
sed "
s/[[:blank:]]\{1,\}/$tab /g
s/[^[:blank:]]\{1,\}[[:blank:]]*$/1 /
s/^[[:blank:]]*//" < infile > outfile
Simplesmente com o GNU sed
, usando -i
para substituir o texto diretamente no arquivo:
sed -i 's:\(.*\s\)\(.*\s\)\(.*\)::g' textfile
As colunas são correspondidas por grupos de expressões regulares nos parênteses, reutilizando-as com e
e, em seguida, usando um "1" para substituir o último grupo.
Neste caso de uso, a solução proposta usando awk
é boa e curta também.
isso fará o trabalho:
cat textfiles | cut -d' ' -f-2 | sed 's/$/ 1/'
cat filename | awk -F ' ' '{$3=1; print $0}' > filename
Tags grep text-processing awk sed replace