linux + 파일 형식 열을 하나의 열로 변환

linux + 파일 형식 열을 하나의 열로 변환

다음 파일(Linux.txt)이 있습니다.

linux-test01 linuxER
LinuxCV      LinuxWE LinuxPL
LinuxDF      LinuxXC LinuxSD     LinuxAQ

다음 출력을 생성하기 위해 awk 또는 perl one-liner를 사용하여 어떻게 인쇄할 수 있습니까(출력은 새 파일 - LinuxNewOrder.txt에 있음)

linux-test01
LinuxCV 
LinuxDF
linuxER
LinuxWE
LinuxXC
LinuxPL
LinuxSD
LinuxAQ

따라서 두 번째 열은 첫 번째 열 뒤에 있고, 세 번째 열은 두 번째 열 뒤에 오는 식입니다.

답변1

awk및 다음의 조합을 사용하십시오 grep.

awk -v RS=" " '{print}' Linux.txt | grep . > LinuxNewOrder.txt

더 간단한 방법은 다음을 사용하십시오 xargs.

xargs -n 1 < Linux.txt > LinuxNewOrder.txt

답변2

그냥 awk를 사용하여 입력의 첫 번째 열을 인쇄한 다음 두 번째 열을 인쇄하세요.

awk '{ for (i = 1; i <= NF; i++) a[i] = a[i] "\n" $i }
  END  { for (i in a) print substr(a[i], 2) }' Linux.txt

배열을 사용하면 a각 열에 대해 i필드가 $i에 연결됩니다 a[i]. 입력이 끝나면 a[i]전체 열 i가 포함됩니다. 마지막으로 $1`을 생략하고 열을 순서대로 인쇄합니다 "\n" which was stuffed in before.

답변3

awk 색인 인쇄 필드에 대해 열별로 반복할 수 있습니다.

for i in $(seq $(awk '{print NF}' linux.txt | sort -nu | tail -n 1)); do awk -v field=$i '{print $field}' linux.txt | grep -v "^$"; done > LinuxNewOrder.txt

$ cat LinuxNeworder.txt
linux-test01
LinuxCV
LinuxDF
linuxER
LinuxWE
LinuxXC
LinuxPL
LinuxSD
LinuxAQ

추가 설명:

  • awk '{print NF}' linux.txt | sort -nu | tail -n 1:최대 열 수 가져오기
  • awk -v field=$i '{print $field}' linux.txti: bash 변수를 열 인덱스로 사용하여 열별로 인쇄합니다.
  • grep -v "^$": 빈 필드 삭제

관련 정보