행을 열로 적절한 형식으로 바꿉니다.

행을 열로 적절한 형식으로 바꿉니다.

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

관련 정보