내 파일에 다음 목록이 있습니다
더 많은 파일.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
임시 파일을 수락하는 경우 다음 두 단계를 거쳐 사용할 수 있습니다 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
이렇게 하면 현재 디렉터리에 번호가 매겨진 파일이 생성되므로 다른 파일을 덮어쓰지 않도록 주의하세요.