$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
아니오라고 가정 -
).
또는 (변수 내용, 파일 이름)에 개행 문자가 포함되지 않거나 공백이나 탭으로 시작되지 않는 경우 sed
GNU 를 사용하십시오.$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