파일 B의 첫 번째 줄 위에 파일 A의 줄을 삽입하는 방법

파일 B의 첫 번째 줄 위에 파일 A의 줄을 삽입하는 방법

저는 이 문제를 겪고 있고 온라인으로 검색해도 결과가 없어서 여기에 도움을 요청하고 싶습니다.

약 80,000,000줄의 파일이 있습니다. 내 임무는 그것들을 각각 500,000줄의 파일로 나누는 것입니다. 좋습니다. 제가 사용하는 코드는 다음과 같습니다.

#split -l 500000 myfile segment

질문 1: 그런데 그 이후에는 구체적인 업무가 있어요. 원본 파일에서 첫 번째 줄은 입니다 ID. 이 줄을 맨 위에 있는 모든 분할 파일에 복사해야 합니다(모든 분할 파일의 첫 번째 줄에 이 ID 줄이 있도록).

나는 코드를 시도했습니다 :

#sed -n 1,1p originalFile >> splitFile

어떻게든 작업을 수행하지만 ID각 분할 파일의 맨 아래에 줄을 추가합니다. ID각 분할 파일의 맨 위(첫 번째 줄)에 이 줄을 배치 하는 코드가 있었으면 좋겠습니다 .

질문 2 (btw). 나는 약을 가지고 있습니다. 170개의 분할 파일. 각 분할 파일의 상단에 ID 줄을 추가하는 루프를 작성할 수 있습니까?

모든 제안에 감사드립니다!

답변1

주문

$ sed -n "1,1p" originalFile >>splitFile

splitFile>>쉘에 알리기 위해 Since 끝에 ID를 추가합니다.추가의파일로 스트리밍합니다. 종료하기 전에 sed8천만 행이 모두 처리되기 때문에 속도도 매우 느립니다.originalFile

분할하면 xaa등의 이름으로 약 160개의 파일이 생성됩니다. 원본 파일의 헤더를 단계별로 이 파일에 추가해 보겠습니다 xab.xac

head -n 1 originalFile >id_line.txt

for f in x??; do
  cat id_line.txt "$f" >tmpfile && mv tmpfile "$f"
done

rm id_line.txt

첫 번째 명령은 첫 번째 줄을 originalFile자체 파일로 추출합니다 id_line.txt.

split이 루프는 기본 접두사 등을 사용했다고 가정하고 생성된 모든 파일을 반복 하고 id_line.txt분할 파일을 이름이 지정된 파일로 연결합니다 tmpfile. 성공하면 tmpfile분할 파일을 대체합니다.

마지막 줄은 id_line.txt이제 그 목적을 달성한 것을 제거합니다.

답변2

그렇게 간단합니다.

(head -n1 fileA.txt; cat fileB.txt) >result.tmp

result.tmp 파일은 첫 번째 줄 위에 FileA 줄이 있는 FileB가 됩니다.

변경 사항을 보면 result.tmp를 fileB.txt로 이동하려는 것과 같습니다.

귀하의 질문에 fileA의 어떤 행을 fileB에 삽입할지 지정하지 않았으므로 첫 번째 행을 원한다고 가정합니다.

답변3

덮어쓰기 전에 splitFilewith 의 내용을 가져오십시오.cat

echo -e "$(sed -n 1,1p originalFile)\n$(cat splitFile)" > splitFile

읽기는 쉽지만 대용량 파일의 경우 비용이 많이 들 수 있습니다.

답변4

sed를 사용해 보세요

$ sed -i "1i$(sed -n 1p originalFile)" splitFile
  • 1i파일의 라인 1 뒤에 텍스트를 삽입합니다.
  • $(sed -n 1p originalFile)원본 파일의 첫 번째 줄을 가져옵니다.

관련 정보