Apenas uma variante da solução @ John1024:
paste -d '=' p*.dat | sed 's/=\S*//g'
Eu tenho mais de 10 arquivos, a primeira coluna é a mesma em todos os arquivos, eu preciso coletar todas as colunas 2 em todos os arquivos contra a primeira coluna em um arquivo. Eu tentei com colar então awk mas isso imprimir apenas as colunas nos primeiros 10 arquivos
paste p{01..20}.dat | awk '{print $1" "$2" "$4" "$6" "$8" "$10" "$12" "$14" "$16" "$18" "$20}' > output.dat
exemplo para o arquivo p01.dat
0.000 1.3594
0.500 1.3600
1.000 1.3603
1.500 1.3601
2.000 1.3595
2.500 1.3584
3.000 1.3570
3.500 1.3552
4.000 1.3530
4.500 1.3506
todos os outros arquivos têm o mesmo formato e a mesma primeira coluna
Apenas uma variante da solução @ John1024:
paste -d '=' p*.dat | sed 's/=\S*//g'
Você precisa de um loop for
. Experimente:
paste p{01..20}.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
Vamos pegar três arquivos de entrada:
$ paste p*.dat
1 a 1 aa 1 aaa
2 b 2 bb 2 bbb
3 c 3 cc 3 ccc
Nosso comando gera:
$ paste p*.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
1 a aa aaa a a a a a a a a a a a a a a a a a
2 b bb bbb b b b b b b b b b b b b b b b b b
3 c cc ccc c c c c c c c c c c c c c c c c c
Vamos começar com os três arquivos acima e criar mais 17:
for i in {04..20}; do cp p01.dat p$i.dat; done
Podemos verificar se a colagem funciona:
$ paste p{01..20}.dat
1 a 1 aa 1 aaa 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a
2 b 2 bb 2 bbb 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b
3 c 3 cc 3 ccc 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c
Também podemos verificar se o comando awk funciona:
$ paste p{01..20}.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
1 a aa aaa a a a a a a a a a a a a a a a a a
2 b bb bbb b b b b b b b b b b b b b b b b b
3 c cc ccc c c c c c c c c c c c c c c c c c
paste
+ cut
+ seq
truque:
paste -d' ' p{01..20}.dat | cut -d' ' -f1,"$(seq -s',' 2 2 20)"
Caso de teste (em 3 arquivos):
$ head p0[1-3].dat
==> p01.dat <==
0.000 1.3594
0.500 1.3600
1.000 1.3603
1.500 1.3601
2.000 1.3595
2.500 1.3584
3.000 1.3570
3.500 1.3552
4.000 1.3530
4.500 1.3506
==> p02.dat <==
0.000 2.3594
0.500 2.3600
1.000 2.3603
1.500 2.3601
2.000 2.3595
2.500 2.3584
3.000 2.3570
3.500 2.3552
4.000 2.3530
4.500 2.3506
==> p03.dat <==
0.000 3.3594
0.500 3.3600
1.000 3.3603
1.500 3.3601
2.000 3.3595
2.500 3.3584
3.000 3.3570
3.500 3.3552
4.000 3.3530
4.500 3.3506
paste -d' ' p{01..03}.dat | cut -d' ' -f1,"$(seq -s',' 2 2 6)"
0.000 1.3594 2.3594 3.3594
0.500 1.3600 2.3600 3.3600
1.000 1.3603 2.3603 3.3603
1.500 1.3601 2.3601 3.3601
2.000 1.3595 2.3595 3.3595
2.500 1.3584 2.3584 3.3584
3.000 1.3570 2.3570 3.3570
3.500 1.3552 2.3552 3.3552
4.000 1.3530 2.3530 3.3530
4.500 1.3506 2.3506 3.3506