Este comando sed
removerá as últimas duas cadeias separadas por espaços, citadas no final de cada linha do arquivo infile
e enviará os resultados para outfile
:
sed 's/ *"[^"]*" *"[^"]*" *$//' < infile > outfile
Tenho inúmeros arquivos delimitados por espaço de 2 GB de um sistema de origem. Cada linha em cada arquivo contém o mesmo número de strings envolvidas por "qualificadores de texto.
Eu preciso eliminar as duas últimas seqüências de caracteres e seus qualificadores de texto de cada linha de cada arquivo. (como remover as duas últimas colunas de um relatório colunar). Com arquivos menores, posso importar para o Excel, delimitar, excluir as colunas, salvar como delimitado por tabulações (muito mais útil que espaços).
Anycase, esses arquivos são muito grandes e possuem muitas linhas para o Excel. Então sed
??
"text1" "text2" "text3" "text4" "text5" "text6"
Cada linha tem o mesmo número de strings. Como eu derrubo "text5" "text6" de cada linha?
Este comando sed
removerá as últimas duas cadeias separadas por espaços, citadas no final de cada linha do arquivo infile
e enviará os resultados para outfile
:
sed 's/ *"[^"]*" *"[^"]*" *$//' < infile > outfile
Se você sabe que sempre deseja excluir as duas últimas colunas, essa expressão pode ser usada:
awk 'NF-=2' file
Percebi que isso não funciona com nawk
, não sei por quê. A maneira portátil é forçar a divisão do campo com '$ 1 = $ 1:
awk '{NF-=2} $1=$1' file
Saída:
"text1" "text2" "text3" "text4"
awk '{$(NF-1)=$NF=""}1' inp
perl -pale '$_ = "@F[0..@F-3]"' inp
sed -ne '
s/" "/"\
"/g
:a
s/\n/ /
/\n.*\n.*\n/ba
P
' inp
awk
code anula os últimos e os últimos campos e impressões. perl
, os campos são armazenados em @F
array e os slice
de 0 até o terceiro e último são selecionados e armazenados na linha atual $_
. As aspas duplas existem para efetuar o xformation de cadeia de caracteres > e unidas pelo $"
superglobal
cujo valor padrão é um espaço. A opção -p
Perl, em seguida, carrega o valor $_
para a stdout. sed
, primeiro transformamos todos os padrões em " "
--- > "\n"
, em seguida, entramos em um loop onde recuperamos o \n
até restarem dois. Em que ponto de tempo usamos o comando P
uppercase p, para imprimir a primeira parte do espaço padrão. Tags delete text-processing text sed