/ / Preciso deletar a última coluna em toda terceira linha de um arquivo - linux, bash, awk, sed

Precisa excluir a última coluna em cada terceira linha de um arquivo - linux, bash, awk, sed

Até agora, eu tenho o seguinte código que me permitepara percorrer um arquivo e identificar a terceira linha de cada arquivo. No entanto, quero excluir a última coluna em todas as terceiras linhas, mas estou tendo problemas para criar a sintaxe:

#!/bin/bash

counter=1
lines=$(wc -l < "test_file")
echo $lines

while read line; do
if (( $counter % 3 == 0 )); then
#Need a good one liner here to solve the problem!
else
echo "$line is not a multiple of three."
fi
((counter = counter + 1))
done < "test_file"

Eu estou aberto para usar o awk, mas eu não sei como fazer isso inline em uma linha dentro de um arquivo. Se isso puder ser feito com parâmetros no arquivo inteiro, tudo bem.

Além disso, se o divisível por linha 3 contém apenas um campo, que deve ser excluído também. Nunca haverá uma linha em branco já existente.

Entrada de amostra:

my dog smells
my cat bites
my fish swims
a b c
d e f
g h i

Exemplo de saída:

my dog smells
my cat bites
my fish
a b c
d e f
g h

Respostas:

2 para resposta № 1

o awk é mais fácil de lidar com esse tipo de tarefa:

 awk "NR%3==0{NF--}7" file

vamos fazer um pequeno teste:

kent$  cat f
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d
a b c d

kent$  awk "NR%3==0{NF--}7" f
a b c d
a b c d
a b c
a b c d
a b c d
a b c
a b c d
a b c d
a b c
a b c d

1 para resposta № 2

Isso pode funcionar para você (GNU sed):

sed "3~3s/sS+$//" file