두 개 이상의 파일 행을 인터리브하는 방법은 무엇입니까?

두 개 이상의 파일 행을 인터리브하는 방법은 무엇입니까?

2개의 파일을 하나의 파일로 출력하려고 합니다. 다음 명령을 시도했습니다.

cat file1 file2

하지만 여기서는 file2데이터가 file1.

내가 필요한 것은 첫 번째 행, file1첫 번째 행, 두 번째 행, 두 번째 행 등입니다.file2file1file2

누구든지 간단한 방법으로 이 작업을 수행하는 방법을 말해 줄 수 있습니까?

답변1

이를 위한 앱이 있습니다!

$ cat file1
file1 line1
file1 line2

$ cat file2
file2 line1
file2 line2

이제 다음 파일을 매개변수로 전달하면 paste:

$ paste -d' ' file1 file2
file1 line1 file2 line1
file1 line2 file2 line2

"file1 첫 번째 줄 다음에 file2 첫 번째 줄이 오고, file1 두 번째 줄 다음에 file2 두 번째 줄이 온다"는 것은 붙여넣는 각 줄 사이에 새 줄을 원한다는 뜻입니다 -d. (구분 기호) 옵션을 조정하면 됩니다.

$ paste -d'\n' file1 file2
file1 line1
file2 line1
file1 line2
file2 line2

답변2

POSIX awk; 이것은 여러 파일에서 작동하며 파일의 줄 수가 같을 필요도 없습니다. 모든 파일이 줄 수를 초과할 때까지 스크립트가 계속 실행됩니다.

BEGIN {
  do {
    br = ch = 0
    while (++ch < ARGC)
      if (getline < ARGV[ch]) {
        printf ch < ARGC - 1 ? $0 FS : $0 RS
        br = 1
      }
  } while (br)
}

답변3

빠른 솔루션

# Takes as many file arguments as needed
function InterleaveFiles {

    local counter=0
    local hasLine=true

    while [ $hasLine == true ]; do
            hasLine=false
            for i in "$@"; do
                    line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i")
                    if [ -n "$line" ]; then
                            echo "$line"
                    hasLine=true
                    fi
            done
            counter=$((counter+1))
    done
}

InterleaveFiles 파일 1 파일 2 파일 3 파일 4

답변4

paste -d '\n' file1 file2 > file3

file1file2입력 파일이며 file3생성된 출력이 됩니다.

관련 정보