![Transponha linhas em colunas no formato adequado](https://rvso.com/image/164728/Transponha%20linhas%20em%20colunas%20no%20formato%20adequado.png)
Eu tenho 3 arquivos de texto comoemp id.txt, antes sal.txt, agora sal.txt. Conteúdo destes 3 arquivos: -
emp id.txt
emp id ----- 1 4 7 10 13 16 19
antes de sal.txt
before sal ----- 23 56 78 97 105 123 145
agora sal
now sal ---- 25 60 82 99 109 124 150
Usei abaixo no shell script
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) } END{ for (i in RtoC) print RtoC[i] }'
para converter de linha para coluna, obtive uma saída como -
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
emp before now
id sal sal
--- ----- ----
Mas eu quero a saída no formato abaixo, como-
--------------------------------
|emp id |before sal | now sal |
|--------|---------- | --------|
|1 | 23 | 25 |
|4 | 56 | 60 |
|7 | 78 | 82 |
|10 | 97 | 99 |
|13 | 105 | 109 |
|16 | 123 | 124 |
|19 | 145 | 150 |
--------------------------------
Você poderia me ajudar com isso para que eu possa obter a saída no formato acima.
Responder1
step1:
for i in "emp_id.txt" "beforesal.txt" "nowsal.txt"; do perl -pne "s/ /\n/g" $i >> "$i"fi; done
step2:
paste emp_id.txtfi beforesal.txtfi nowsal.txtfi
saída
emp before now
id sal sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
Responder2
defina uma pequena função que transforme o arquivo em uma coluna:
f2c() { tr -s '[:blank:]' '\n' < "$1"; }
então use paste
para costurar as colunas juntas,substituições de processocomo argumentos de arquivo para colar e column
para uma saída bonita.
paste <(f2c 'emp id.txt') <(f2c 'before sal.txt') <(f2c 'now sal.txt') | column -t
emp before now
id sal sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150
Responder3
dadoawk
comandona verdade, faz muito perto do que você espera como saída, mas sim, divide o cabeçalho em linhas separadas por causa dos espaços (isso não será um problema se seus arquivos de entrada foram separados com Tab ou qualquer outra coisa), de qualquer forma, não entendi como o cabeçalho vai imprimir nas últimas linhas talvez awk
versões diferentes tenham diferentesOrdenaçãoopção como padrão; por exemplo, PROCINFO["sorted_in"]="@val_num_desc"
sua saída seria semelhante a abaixo (mas ainda não tenho ideia de como os números foram classificados em ordem asc no resultado esperado):
19 145 150
16 123 124
13 105 109
10 97 99
7 78 82
4 56 60
1 23 25
id sal sal
emp before now
----- ----- ----
vamos tentar com o comando modificado abaixo e ver se é isso que você precisa ou próximo de algo que você realmente espera:
awk '{ $2=$1"_"$2; $1="";
for (i=2; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] "\t" $i: $i) }
END{ PROCINFO["sorted_in"]="@unsorted";
for (i in RtoC) print RtoC[i];
}' emp.txt before.txt new.txt |column -t
saída:
emp_id before_sal now_sal
----- ----- ----
1 23 25
4 56 60
7 78 82
10 97 99
13 105 109
16 123 124
19 145 150