Removendo Coluna no Arquivo Separado em Campo Usando Script

-2

Os arquivos são separados por | símbolo de tubo

myfile.txt

Hello|how|are|you|hope|you|are|doing|fine
Lilly|jasmine|rose|sunflower|nightfire|flowers

Quero remover colunas maiores que 3. Quero o conjunto de resultados como

Hello|how|are
Lilly|jasmine|rose

Usando comandos unix na escrita de shell unix.

VRVigneshwara
fonte
O que você já tentou e que problemas encontrou? Nos sites Stack Exchange, você deve primeiro tentar resolver o problema sozinho antes de perguntar.
Pabouk
Eu tenho a resposta! e respondeu abaixo!
VRVigneshwara

Respostas:

1

Usando OFSe FS(Output) Field Separator, basta imprimir as 3 primeiras colunas

$ awk  'BEGIN{OFS=FS="|"}{print $1,$2,$3}' file.txt
Hello|how|are
Lilly|jasmine|rose

Usando sed, mantenha apenas os dois primeiros " |[everything that's not |]":

~$ sed 's/\(\(|[^|]*\)\{2\}\).*/\1/' file.txt
Hello|how|are
Lilly|jasmine|rose
fredtantini
fonte
Por exemplo, eu usei 3 colunas. Na verdade, tenho 17 colunas a serem selecionadas como $ 1 $ 2 ... $ 17.
precisa saber é o seguinte
2
@ VIGNESH12990 ao fazer uma pergunta, você precisa dar um exemplo que reflete o que você está realmente tentando fazer. Edite sua pergunta e faça com que ela mostre o que você realmente está perguntando. Há uma enorme diferença entre a seleção de 3 campos e 17.
terdon
@terdon; Não pode haver uma diferença, de acordo com a solução proposta. (Veja a minha resposta para uma awksolução onde não importa.)
Janis
1
cut -d'|' -f1-3 myfile

Esta será a solução mais fácil para isso. Funciona bem!

VRVigneshwara
fonte
Eu acho que isso é uma solução tão fácil quanto essa. Por que seria mais fácil se isso e isso são iguais?
Anthon
1
@VRVigneshwara; Você não pediu uma solução sed ou awk?
Janis
1

No awkbasta fazer:

awk 'BEGIN{FS=OFS="|"}; NF=3' myfile.txt

(Se você tiver 17 colunas, conforme observado em algum comentário, basta alterar 3para 17.)

Janis
fonte