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 № 1o 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