Bem, o último campo em word1,word2,word3,a,b,c,d,e
é e
e o terceiro campo é word3
. Parece que você quer a parte da linha que começa com o terceiro campo. É mais fácil com cut
:
$ echo word1,word2,word3,a,b,c,d,e | cut -d , -f 3-
word3,a,b,c,d,e
-f 3-
é -f x-y
para os campos x a y, mas com y
omitido, portanto é de 3 rd para o último campo.
Observe que as linhas contêm pelo menos 3 campos. Ele daria linhas de saída vazias para linhas de entrada que contenham 2 campos e deixaria a linha intocada se não contivesse vírgula (você pode adicionar uma opção -s
para pular as linhas não delimitadas):
$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -d , -f 3-
a
c
c,d
$ printf '%s\n' a a,b a,b,c a,b,c,d | cut -sd , -f 3-
c
c,d
Com awk
, você poderia fazer:
$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,[^,]*,/, "")'
c
c,d
(a variante awk 'sub(/^([^,]*,){2}/, "")'
, embora POSIX, é menos portável, pois ainda existem algumas implementações awk
que não suportam o operador {x,y}
regexp)
Para excluir os dois primeiros campos (e apenas imprimir as linhas onde eles foram removidos), embora isso esteja usando awk
como sed
glorificado, como é o mesmo que sed -n 's/^[^,]*,[^,]*,//p'
.
Ou:
$ printf '%s\n' a a,b a,b,c a,b,c,d | awk 'sub(/^[^,]*,?[^,]*,?/, "")'
c
c,d
para imprimir uma linha vazia para linhas com menos de 3 campos.