sed가 내 파일을 역순으로 쓰는 이유는 무엇입니까?
old_file.txt
다음 데이터가 포함된 텍스트 파일( )을 읽어야 합니다 .
파일 내용 old_file.txt
:
1.00
2.00
3.00
다음을 포함하는 두 번째 파일이 있습니다.
파일 내용 new_file.txt
:
AAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
nth
이제 커서를 파일 줄로 이동 new_file.txt
하고 다음과 같이 모든 내용을 삽입 해야 합니다 old_file.txt
.
나는 필요하다:
AAAA
BBBB
CCCC
1.00 <--
2.00 <--
3.00 <--
DDDD
EEEE
FFFF
GGGG
하지만 나는 다음을 얻습니다.
내가 얻는 것:
AAAA
BBBB
CCCC
3.00 <--
2.00 <--
1.00 <--
DDDD
EEEE
FFFF
GGGG
이것은 내 코드입니다.
#!/bin/bash
line=3 # line that I need (exemple)
while read x
do
sed -i "${line}a\ $x" new_file.txt
done < old_file.txt
왜 글이 역순으로 일어나는지 모르겠습니다!
답변1
이는 루프가 1.00
after CCCC
, after 2.00
, CCCC
after 3.00
에 추가되기 때문에 발생합니다 CCCC
.
원하는 주문을 받으려면나줄 (n+1) 앞에 삽입하십시오 $x
. 그러나 다음을 사용하는 경우 쉘 루프가 전혀 필요하지 않습니다.아르 자형파일에서 직접 읽기:
sed -i "${line}"'r old_file.txt' new_file.txt
답변2
sed가 없는 대안입니다.
#!/bin/bash
line=3
{ head -${line} new_file.txt ; cat old_file.txt; tail +$((line+1)) new_file.txt ; }
즉, $line
의 처음 몇 줄을 new_file
출력에 복사한 다음 의 전체 줄을 복사 old_file
하고 의 new_file
나머지 줄을 출력에 복사합니다 line+1
.