Ubuntu에서 Bash를 사용하고 있으며 질문은 다음과 같습니다.
.TXT
특정 폴더에 수십 개의 파일이 있습니다.
내가 아는 한, 그들은 모두 제목을 가지고 있습니다. (각 제목이 한 줄에 있다고 생각하지만 100% 확실하지는 않습니다.) 그러나 동일한 헤더를 공유할 필요는 없습니다. 5개의 파일에는 동일한 헤더가 있을 수 있고 다른 파일에는 고유한 헤더가 있을 수 있습니다.
궁극적으로 내가 원하는 것은 동일한 헤더를 공유하는 파일을 연결하는 것입니다. 다음 질문에 대한 답변(동일한 헤더로 여러 파일 연결)은 동일한 헤더를 가진 여러 파일을 연결하는 방법을 설명하지만 제 경우에는 먼저 동일한 헤더를 공유하는 파일을 연결하기 전에 그룹화해야 했습니다(그리고 해당 그룹 헤드에 첫 번째 파일의 헤더만 유지해야 했습니다).
어떤 아이디어라도 환영합니다 :) 감사합니다!
답변1
awk '
FNR==1{
if (!($0 in h)){file=h[$0]=i++}
else{file=h[$0];next}
}
{print >> (file)}
' *.txt
awk가 파일의 첫 번째 줄에 있는 경우:
- 헤더 배열에 헤더가 없으면
h
숫자(초기 0)가 파일 이름으로 설정되고i++
배열의 키에 배치됩니다.$0
- 그렇지 않은 경우(헤더가 이미 배열에 있는 경우
h
) 배열에서 파일 이름을 가져오고 다음 줄을 읽습니다.
마지막으로 해당 행이 해당 파일에 인쇄됩니다.
하지만 "열린 파일이 너무 많습니다." 또는 이와 유사한 메시지가 나타납니다.
GNU awk는 이를 방지하기 위해 요청 시 파일 열기 및 닫기를 처리하지만 다른 awk에서는 이를 수행하지 않을 수 있습니다. 이 경우 다음으로 이동하십시오.
awk '
FNR==1{
if (!($0 in h)||file!=h[$0]){close(file)}
if (!($0 in h)){file=h[$0]=i++}
else{file=h[$0];next}
}
{print >> (file)}
' *.txt
속도가 느려질 수 있다는 점을 명심하세요.