두 개의 파일에 줄을 펼칩니다.

두 개의 파일에 줄을 펼칩니다.

$file1각 사람에 대한 두 행의 데이터가 포함된 데이터 파일( )이 있습니다 . 다른 데이터 파일에서 데이터의 세 번째 행()을 펼쳐야 합니다 $file2. 그래서 내 입력은 다음과 같습니다

>cat $file1
  bob  1  1  0
  bob  1  0  1
  alan 0  0  1
  alan 0  1  1

>cat $file2
 bob  a  a  b
 alan a  c  a

따라서 원하는 결과는 다음과 같습니다.

>cat $file3
  bob  1  1  0
  bob  1  0  1
  bob  a  a  b
  alan 0  0  1
  alan 0  1  1
  alan a  c  a

다른 모든 행을 분산시켜야 한다면 paste다음과 같이 사용합니다.

>paste '-d\n' $file1 $file2

이를 달성하는 가장 좋은 도구는 무엇입니까? 을 사용하고 있습니다 zsh.

답변1

오직:

paste -d '\n' -- - - "$file2" < "$file1"

( $file2아니오라고 가정 -).

또는 (변수 내용, 파일 이름)에 개행 문자가 포함되지 않거나 공백이나 탭으로 시작되지 않는 경우 sedGNU 를 사용하십시오.$file2

sed "2~2R$file2" "$file1" < "$file2"

사용하세요 awk( 문자가 $file1포함되어 있지 않은 경우 =(또는 포함된 경우 앞 부분은 허용되는 awk 변수 이름이 아님)):

export file2
awk '{print}
     NR % 2 == 0 {if ((getline l < ENVIRON["file2"]) > 0) print l}
    ' "$file1"

답변2

순서를 유지할 필요가 없다면 할 수 있습니다cat $file1 $file2 | sort

답변3

기타 및

awk '
    FNR==NR{
        A[$1]=$0
        next
    }
    1
    !(NR%2){
        print A[$1]
    }
    ' file2 file1

paste또는 두 파일이 모두 올바르게 정렬되어 있으면 더 간단합니다 (can 사용 ).

awk '
    1
    !(NR%2){
        getline <"file1"
        print
    }
    ' file1

관련 정보