저는 이 문제를 겪고 있고 온라인으로 검색해도 결과가 없어서 여기에 도움을 요청하고 싶습니다.
약 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를 추가합니다.추가의파일로 스트리밍합니다. 종료하기 전에 sed
8천만 행이 모두 처리되기 때문에 속도도 매우 느립니다.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
덮어쓰기 전에 splitFile
with 의 내용을 가져오십시오.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)
원본 파일의 첫 번째 줄을 가져옵니다.