파일에서 열을 읽고 다른 파일의 특정 열을 추가합니다.

파일에서 열을 읽고 다른 파일의 특정 열을 추가합니다.

다음과 같은 두 개의 파일이 있습니다.

파일 A:

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW

파일 B:

NE_Name       SW   
ABC           4.4
ASD           4.3
...           ...

fileA는 단 한 줄로 구성되며 여러 헤더(예: 이름, 사이트 이름 등)가 있습니다. 그리고 fileB에는 엄청난 수의 줄이 포함된 2개의 필드가 있습니다.

이 두 파일을 결합하고 싶습니다.

결과물 파일:

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,4.4
ASD,,,,,,4.3

따라서 출력 파일에는 fileA에 있는 모든 헤더가 있으며 "Name"(fileB에서 얻은 "NE_Name" 값 사용) 및 "SW"(fileB에서 얻은 "SW" 값 사용)라는 확장된 필드가 있습니다.

위에서 언급한 2개의 입력 파일에서 이 출력 파일을 어떻게 얻을 수 있나요?

답변1

한 가지 방법은 다음과 같습니다 awk.

$ awk -F, 'NR==1{nf=NF-1; print $0; FS=" "} \
         NR>2{printf("%s%.*s%s\n",$1,nf,",,,,,,,,,,,,,,,,,",$2)}' fileA fileB

Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,4.4
ASD,,,,,,4.3

중요한 부분은 첫 번째 file에서 가져온 숫자로 구분된 printffileB의 첫 번째 및 세 번째 필드를 인쇄한다는 것입니다 .,nf=NF-1

답변2

tail -n+2 fileB | sed -r 's/[[:space:]]+/,,,,,,/' | cat fileA - > Output

설명하다

tail -n +2 fileBfileB의 끝에 쓰기는 첫 번째 줄을 무시하고 싶기 때문에 두 번째 줄부터 시작됩니다.

sed, 사용 -r, --regexp-extended(메타 문자 의미를 나타 내기 위해 +'마지막 하나')는 첫 번째 공백 문자 집합을 예제에서 예상되는 쉼표 수로 바꿉니다.

cat마지막으로 fileA와 파이프 sed(호출)를 통해 수신된 데이터를 연결 -하고 작성하면 요청에 따라 데이터가 파일로 리디렉션됩니다 stdout.Output

한정

NE_Name 또는 SW 열에 공백 문자가 있으면 아무런 효과가 없습니다.

답변3

또 다른 sed방법:

$ sed 's/   */,,,,,,,/;/NE_/d' fileA fileB
Name,Site Name,Product UPEI,Product Name,NMS Flag,Product Model, SW
ABC,,,,,,,4.4
ASD,,,,,,,4.3

첫 번째 sed명령은 3개 이상의 공백을 7개의 쉼표로 바꾸고, 두 번째 명령은 일치하는 줄을 모두 삭제합니다 NE_.

관련 정보