파일 1.txt:
1
2
3
4
5
6
파일 2.txt:
A
B
C
D
E
원하는 출력 비율은 3:1(file3.txt)입니다.
1
2
3
A
4
5
6
B
내가 시도한 명령:
sed Rfile2.txt file1.txt >file3.txt
paste -d '\n' file1.txt file2.txt >file3.txt
답변1
그리고 paste
:
paste -d '\n' <file1.txt - - - file2.txt
파일 중 하나가 소진된 후에도 다른 파일에 여전히 라인이 남아 있으면(예제에 표시된 대로) 라인을 계속 출력합니다.
그리고 awk
:
awk '{print}; NR % 3 == 0 {getline < "file2.txt"; print}' file1.txt
또는 GNU에 sed
상응하는 것:
sed '3~3 R file2.txt' file1.txt
이번에는 소진되면 중지되지만 file1.txt
소진되면 계속됩니다(그리고 변형에서는 빈 줄을 출력하고 GNU 변형에서는 아무것도 출력하지 않습니다).file2.txt
awk
sed
파일이 모두 소진되면 중지합니다.
awk '{print}
NR % 3 == 0 {
if ((getline < "file2.txt") <= 0) exit
print
}' file1.txt
답변2
$ awk '{print} (FNR % 3)==0{getline<"file2.txt"; print}' file1.txt
1
2
3
A
4
5
6
B
어떻게 작동하나요?
print
그러면 file1.txt의 모든 줄이 인쇄됩니다.
(FNR % 3)==0{ getline <"file2.txt"; print}
세 번째 줄마다 file2.txt에서 한 줄을 인쇄합니다.
선택하다
어떤 사람들은 awk 사용을 강력히 반대합니다 getline
. 이 경우:
$ awk 'FNR==NR{a[NR]=$0;next} {print} (FNR % 3)==0{print a[FNR/3]}' file2.txt file1.txt
1
2
3
A
4
5
6
B
어떻게 작동하나요?
FNR==NR{a[NR]=$0;next}
첫 번째 파일을 읽는 동안
file2.txt
해당 행을 배열에 저장a
한 다음 나머지 명령을 건너뛰고next
입력 행으로 점프합니다.print
이 지점에 도달하면 두 번째 파일을 읽고
file1.txt
해당 행을 인쇄합니다.(FNR % 3)==0 {print a[FNR/3]}
파일의 줄 번호가
file1.txt
3의 짝수 배수 이면file2.txt
줄 번호가 현재 줄의 1/3인 파일의 줄을 인쇄합니다file1.txt
.
답변3
Python 사용:
암호:
with open(sys.argv[1], 'rU') as f1, open(sys.argv[2], 'rU') as f2:
while f1 or f2:
for i, line in enumerate(f1):
print line.strip()
if i == 2:
break
if f2:
try:
print(next(f2).strip())
except StopIteration:
f2 = None
결과:
1
2
3
A
4
5
6
B