각 열을 파일 bash의 끝으로 이동

각 열을 파일 bash의 끝으로 이동

~다음과 같이 문자로 구분된 알 수 없는 개수의 열이 포함된 파일이 있습니다 .

1~5~4
toast~8~test
3~9~8

각 열을 반복하여 맨 아래로 이동하려면 어떻게 해야 합니까? 나는 출력을 다음과 같이 원한다:

1
toast
3
5
8
9
4
test
8

열 수를 결정해야 한다는 것은 알고 있지만 그렇게 한 다음 반복하고 이동하는 방법을 잘 모르겠습니다.

답변1

당신은 그것을 사용할 수 있습니다 rs(아르 자형이자형에스혹시) 유틸리티

  1. ~먼저 전치되어 열 구분 기호 로 사용됨
  2. 그런 다음 단일 열로 모양을 변경합니다.

전임자.

$ rs -c~ -T < file | rs 0 1
1
toast
3
5
8
9
4
test
8

또는 Awk를 사용하세요.

$ awk -F~ '
    {for (i=1;i<=NF;i++) a[i] = a[i] == "" ? $i : a[i] "\n" $i} 
    END {for (i in a) print a[i]}
  ' file
1
toast
3
5
8
9
4
test
8

답변2

$ perl -F'~' -lane '
    $A[$_][$.-1] = $F[$_] for 0 .. $#F;}{
    print join $/, @{$A[$_]} for 0 .. $#A;
' input.file

첫 번째 인덱스가 열 번호를 참조하고 두 번째 인덱스가 행 번호를 참조하도록 다차원 배열의 열을 수집하고 저장합니다. 그런 다음 끝 부분에서 열을 반복하고 각 배열 요소를 줄 바꿈으로 구분하여 인쇄합니다.

관련 정보