2013-09-03 7 views
3

파일 A를 사용하여 :병합 내용을 쉘 스크립트를

1 
3 
5 
7 

파일 B : 쉘 스크립트에 입력으로 파일 A와 파일 B를 사용하는

2 
4 
6 
8 

인가 가능하다 간단히

1 
2 
3 
4 
5 
6 
7 
8 
+0

가능한 중복 (http://stackoverflow.com/questions/4011814/how-to [두 개의 텍스트 파일에서 라인을 인터리브하는 방법] -interleave-lines-two-text-files) –

답변

10

사용 paste 그들이 발견하고 정확한 순서로 라인을 인터리브 :

paste -d '\n' filea fileb 

을 또는 파일을 결합하고 정렬 sort를 사용

sort filea fileb 
+0

John..that works..thanks .. – Amistad

4

:

,369 및 내용은 다음과 같습니다 파일 C 인 출력을 얻을
sort -n FileA FileB > FileC 

을 제공합니다 :

1 
2 
3 
4 
5 
6 
7 
8 
+0

이것이 항상 작동하지는 않습니다. 내 파일 이름은 알파벳순으로 정렬해도 문제가 해결되지 않습니다 .John Kugelman의 방법은 절대 없습니다 .. – Amistad

+1

할 일이 없습니다. 파일명은 – fugu

+1

'sort -n FileB FileA> FileC'는 같은 결과를 줄 것이다. 거기에'-u'를 붙이기도 좋은 생각 일 수 있습니다. – dannysauer

2
$ cat > filea 
1 
3 
5 
7 
$ cat > fileb 
2 
4 
6 
8 
$ sort -m filea fileb 
1 
2 
3 
4 
5 
6 
7 
8 
$ 

filea와 fileb를 설정하기 위해 숫자 목록의 끝에있는 ctrl D를 누릅니다. 감사합니다 케빈

+1

처음 두 명령은 영원히 중단됩니다. 리디렉션을 제거해야합니다. – Kevin

+0

케빈, 물론입니다. 보이지 않는 ctrl-D가 발생했습니다! – Vorsprung

1

당신이 쉘 솔루션을 원했다 때문에,

#!/bin/bash 

if [ $# -ne 2 ] ; then 
    echo 'usage: interleave filea fileb >out' >&2 
    exit 1 
fi 

exec 3<"$1" 
exec 4<"$2" 

read -u 3 line_a 
ok_a=$? 

read -u 4 line_b 
ok_b=$? 

while [ $ok_a -eq 0 -a $ok_b -eq 0 ] ; do 
    echo "$line_a" 
    echo "$line_b" 

    read -u 3 line_a 
    ok_a=$? 

    read -u 4 line_b 
    ok_b=$? 
done 

if [ $ok_a -ne 0 -o $ok_b -ne 0 ] ; then 
    echo 'Error: Inputs differ in length' >&2 
    exit 1 
fi 
관련 문제