기본 구분 기호

기본 구분 기호

두 문자열을 한 줄로 결합하여 |구분 기호로 사용하고 싶습니다. 을 사용하여 병합할 수 있습니다 . 구분 기호로 사용하여 문자열을 병합 awk '{$1,$2,$3$4$5}'하는 다른 방법이 있습니까 ?|

입력하다:

XXXXXXXX 0 Xxyxhsag | yuiji

산출:

XXXXXXXX 0 Xxyxhsag|yuiji

답변1

데이터에 로 구분된 필드가 포함되어 있고 |구분 기호 |문자의 양쪽에 공백이 포함될 수 있다고 가정합니다. 그런 다음 사용할 입력 필드 구분 기호 awk는 표현식, 즉 문자 및 측면 공백과 일치하는 표현식입니다 *[|] *.|

단일 문자를 |출력 필드 구분 기호로 사용하고 awk출력 레코드를 강제로 다시 생성하면(필드 중 하나를 설정하여) 적어도 질문에서 요청한 방식으로 문제가 해결됩니다.

awk -F ' *[|] *' -v OFS='|' '{ $1=$1 }; 1' file

또는 동등하게,

awk -F ' *[|] *' -v OFS='|' '{ $1=$1; print }' file

이것을 테스트해 보세요:

$ cat file
XXXXXXXX 0 Xxyxhsag | yuiji
$ awk -F ' *[|] *' -v OFS='|' '{ $1=$1 }; 1' file
XXXXXXXX 0 Xxyxhsag|yuiji

sed표현식과 유사한 대체를 사용할 수도 있습니다.

$ sed 's/ *| */|/g' file
XXXXXXXX 0 Xxyxhsag|yuiji

이는 모두 인용된 필드에 구분 기호, 줄 바꿈 또는 따옴표가 포함되지 않은 텍스트 또는 "간단한" CSV 데이터로 데이터를 처리할 수 있다고 가정합니다.

답변2

입력 데이터가 주어지면,

XXXXXXXX 0 Xxyxhsag | one
XXXXXXXX 0 Xxyxhsag     |     two
XXXXXXXX 0 Xxyxhsag|third

기본 구분 기호

기본 awk구분 기호(하나 이상의 연속 공백 또는 탭)를 사용합니다.

awk '{print $1,$2,$3$4$5}' v
XXXXXXXX 0 Xxyxhsag|one
XXXXXXXX 0 Xxyxhsag|two
XXXXXXXX 0 Xxyxhsag|third

세 번째 필드의 변경 사항을 확인하세요.

awk '{printf "3th:[%s]\n",$3}' v
3th:[Xxyxhsag]
3th:[Xxyxhsag]
3th:[Xxyxhsag|third]

실제 상황에 항상 5개의 필드가 있는 경우 이것이 해결책이 될 수 있습니다.

파이프(|) 구분 기호

구분 기호 로 사용할 수 있지만 |이렇게 하면 필드의 공간이 보존됩니다.

awk -F\| '{printf "%s|%s\n", $1, $2}' v
XXXXXXXX 0 Xxyxhsag | one
XXXXXXXX 0 Xxyxhsag     |     two
XXXXXXXX 0 Xxyxhsag|third

출력 구분 기호를 다음으로 변경하면 더 명확해질 수 있습니다.!

awk -F\| '{printf "%s!%s\n", $1, $2}' v
XXXXXXXX 0 Xxyxhsag ! one
XXXXXXXX 0 Xxyxhsag     !     two
XXXXXXXX 0 Xxyxhsag!third

$1이제 후행 공백을 제거 하고 공백을 선행 해야 하기 때문에 많은 이점이 없습니다 $2.

답변3

당신은 awk시도 할 수 있습니다:

awk -F'|' -v OFS='|' '{sub(/ \| /,"|")} 1' file
XXXXXXXX 0 Xxyxhsag|yuiji
  • FS와 OFS를 설정했습니다(동일한 값입니다 |:)
  • 그래야만 다음과 같은 결과를 얻을 수 있습니다.
awk -F'|' -v OFS='|' '1' file
XXXXXXXX 0 Xxyxhsag | yuiji
  • |따라서 다음을 사용하여 주변의 공백을 제거합니다 sub().
{sub(/ \| /,"|")}

관련 정보