공통 헤더를 사용하여 여러 파일 연결

공통 헤더를 사용하여 여러 파일 연결

여러 개의 텍스트 파일이 있고 각 파일의 내용은 다음과 같습니다.

attribute1,attribute2,...
1,2,...

열 이름을 설명하는 첫 번째 줄은 모든 파일에서 동일합니다.

파일의 두 번째 행을 연결하고, 원본 파일의 각 행에 대한 파일 이름이 포함된 새 열을 추가하고, 첫 번째 행 중 하나를 새 파일의 첫 번째 행으로 만들고 싶습니다. 예를 들어 필요한 새 파일은 다음과 같습니다.

file,attribute1,attribute2,...
file1,1,2,...
file2,11,12,...
file3,21,22,...

어떻게 해야 하나요?

답변1

파일 이름을 추가하려면 다음을 사용하십시오 awk.

awk -v OFS=, 'NR==1{print "file", $0};FNR==2{print FILENAME, $0}' file1 file2 ... fileN >outfile

입력의 첫 번째 라인( )이면 NR==1업데이트된 헤더를 인쇄하고, ||각 파일의 두 번째 라인( )이면 FNR==2업데이트된 헤더( ) FILENAME와 라인( $0)을 인쇄합니다.


편집하기 전 초기 답변입니다.
당신은 이것을 할 수 있습니다 sed:

sed -n '1p;n;p' file1 file2 ... fileN >outfile

-n인쇄를 억제하고 1p첫 번째 줄을 인쇄한 다음 각 줄(홀수 줄)에 대해 패턴 공간을 지우고 n확장된 줄(즉, 짝수 줄)을 읽어 p인쇄합니다.

답변2

{   printf file,; head -n1 <file
    grep -n '' ./file* /dev/null|
    sed -ne'/^[^:]*:2:/s/:.:/,/p'
}   >./new_file

grep각 줄의 시작 부분에 파일 이름이 표시되며 줄 번호로 선택하는 데도 도움이 됩니다 n. 그러나 파일 이름에 콜론이 있으면 제대로 작동하지 않을 수 있습니다.

답변3

그리고tail

cat file1.txt && tail -q -n +2 file2.txt file3.txt ..

관련 정보