Você pode ter problemas com cut
se tiver vários espaços como o delimitador. Você poderia usar awk
:
$ awk '{print $2, $4, $5}' OFS='\t' inputfile
BB DD BB
2 4 9
6 8 10
(Você pode fornecer o delimitador de entrada e saída usando FS
e OFS
, respectivamente.)
EDIT: De acordo com seus comentários, se os valores estiverem em colunas desconhecidas, você poderá dizer:
awk 'NR==1{for(i=1; i<=NF; i++) if ($i=="BB" || $i=="DD") {a[i]++;} } { for (i in a) printf "%s\t", $i; printf "\n"}' filename
Para sua entrada, isso resultaria em:
BB DD BB
2 4 9
6 8 10
Funciona mantendo um registro das colunas na primeira linha que contêm BB
ou DD
e, em seguida, imprime essas colunas.
Se você pretende usar uma variável para armazenar os valores da coluna, pode declarar um como:
pattern="^BB$|^DD$"
(observe que as âncoras ^
& $
foram adicionadas para garantir que BB
não corresponda a ABB
e assim por diante. |
é, novamente, um metacaractere de expressão correspondente a or
)
e depois diga:
awk -vp="$pattern" 'NR==1{for(i=1; i<=NF; i++) if ($i~p) {a[i]++;} } { for (i in a) printf "%s\t", $i; printf "\n"}' filename