awk + 파일에 목록을 추가하는 방법

awk + 파일에 목록을 추가하는 방법

파일에 다음 목록이 있습니다

더 많은 file.ex

efifc1a
hygg4a
hdy5d


nhdw4s
wesf3a
fjfhyr



jfhg
gsfar

첫 번째 목록 뒤에 두 번째 목록을 추가하고 두 번째 목록 뒤에 세 번째 목록을 추가하는 방법은 다음과 같습니다.

efifc1a   nhdw4s     jfhg
hygg4a    wesf3a     gsfar
hdy5d     fjfhyr

답변1

어때?

awk '
  BEGIN {FS="\n"; RS="\n\n+"}
  {for (i=1;i<=NF;i++) a[i] = a[i] == ""? $i : a[i]"\t"$i; next}
  END {for (i in a) print a[i]}
' file.ex

테스트:

awk '
>   BEGIN {FS="\n"; RS="\n\n+"}
>   {for (i=1;i<=NF;i++) a[i] = a[i] == ""? $i : a[i]"\t"$i; next}
>   END {for (i in a) print a[i]}
> ' file.ex
efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

awk 사용에 문제가 없다면 다음을 사용하여 수행할 수 있습니다.오토젠의 columns명령transpose여기에 설명된 명령 은행과 열의 전치예를 들어

columns -c3 < file.ex | tr -s ' ' '\t' | transpose -t

답변2

awk임시 파일 보유를 수락하는 경우 및 다음 을 사용하여 2단계 프로세스로 수행할 수 있습니다 paste.

n=$(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex)
paste $(seq $n)

또는 한 줄로:

paste $(seq $(awk '{ print $0 > NR; close(NR) } END { print NR }' RS= file.ex))

두 경우 모두 출력:

efifc1a nhdw4s  jfhg
hygg4a  wesf3a  gsfar
hdy5d   fjfhyr  

참고로 이렇게 하면 현재 디렉터리에 번호가 매겨진 파일이 생성되므로 다른 파일을 덮어쓰지 않도록 주의하세요.

관련 정보