![행을 열로 적절한 형식으로 바꿉니다.](https://rvso.com/image/164728/%ED%96%89%EC%9D%84%20%EC%97%B4%EB%A1%9C%20%EC%A0%81%EC%A0%88%ED%95%9C%20%ED%98%95%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
3개의 텍스트 파일이 있습니다.emp id.txt(sal.txt 이전에는 sal.txt). 이 3개 파일의 내용 :-
엠프 아이디.txt
emp id ----- 1 4 7 10 13 16 19
sal.txt 이전
before sal ----- 23 56 78 97 105 123 145
이제 샐
now sal ---- 25 60 82 99 109 124 150
쉘 스크립트에서 아래를 사용했습니다.
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) } END{ for (i in RtoC) print RtoC[i] }'
행에서 열로 변환하면 다음과 같은 출력이 표시됩니다.
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
--- ----- ----
하지만 다음과 같은 형식으로 출력하고 싶습니다.
--------------------------------
|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 |
--------------------------------
위의 형식으로 출력을 얻을 수 있도록 도와주세요.
답변1
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
산출
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
답변2
파일을 열로 변환하는 작은 함수를 정의하십시오.
f2c() { tr -s '[:blank:]' '\n' < "$1"; }
그런 다음 paste
열을 서로 연결하는 데 사용합니다.프로세스 대체붙여넣을 파일 인수로 사용하고 column
예쁜 출력을 위해 사용합니다.
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
답변3
주어진awk
명령실제로 출력으로 기대하는 것과 매우 유사하지만 공백으로 인해 헤더를 별도의 줄로 나눕니다(입력 파일이 Tab 또는 다른 것으로 분리된 경우 문제가 되지 않습니다). 어쨌든 헤더가 어떻게 표시되는지는 알 수 없습니다. 마지막 줄까지 인쇄할 예정입니다. awk
버전마다 다를 수 있습니다.정렬옵션을 기본값으로; 예를 들어 PROCINFO["sorted_in"]="@val_num_desc"
출력은 아래와 비슷할 것입니다(그러나 예상 결과에서 숫자가 어떻게 오름차순으로 정렬되었는지는 아직 알 수 없습니다).
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
----- ----- ----
아래 수정된 명령을 사용해 보고 그것이 필요한지 또는 실제로 기대하는 것에 가까운지 확인해 보겠습니다.
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
산출:
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