다음과 같은 두 개의 파일이 있습니다.
파일 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에서 가져온 숫자로 구분된 printf
fileB의 첫 번째 및 세 번째 필드를 인쇄한다는 것입니다 .,
nf=NF-1
답변2
tail -n+2 fileB | sed -r 's/[[:space:]]+/,,,,,,/' | cat fileA - > Output
설명하다
tail -n +2 fileB
fileB의 끝에 쓰기는 첫 번째 줄을 무시하고 싶기 때문에 두 번째 줄부터 시작됩니다.
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_
.