Linux의 파이프로 구분된 파일에서 파이프 5 뒤의 00을 공백으로 바꿔야 합니다.

Linux의 파이프로 구분된 파일에서 파이프 5 뒤의 00을 공백으로 바꿔야 합니다.

00파이프로 구분된 파일에서 공백을 바꿔야 하지만 다섯 번째 파이프 뒤에 나타나는 경우에만 가능 합니다 00. 저는 리눅스를 사용하고 있습니다. 나는 시도했다:{sed 's/00/\ /6' input.txt > output.txt}

견본:

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

나는 다음과 같은 결과를 원합니다 :

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|  
ABC|DE|GGH|00|FFHJ|Y
ABC|DE|GGH|N|FFHK|N
ABC|DE|GGH|OO|FFHU|  

답변1

제공한 예에서 필요한 것은 다음과 같습니다.

$ sed 's/|00$/|/' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

또는 6개 이상의 필드 입력에 대해 더욱 강력하고 유연합니다.

$ awk 'BEGIN{FS=OFS="|"} $6=="00"{$6=""} 1' file
FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

답변2

사용행복하다(이전 Perl_6)

raku -pe 's:pos($/.from)/ \| 00 /| / if m:5th/ \| /;'  

또는

raku -pe 's:pos($/.from)[ \| 00 ] = "| " if m:5th[ \| ];'  

입력 예:

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|00
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

예제 출력:

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT| 
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

Raku는 :nth찾으려는 일치 항목(예: :1st, :2nd, )을 지정할 수 있는 "부사" 정규식 매개변수를 구현합니다.:nth(5)

위의 Raku 코드는 위치 m:5th( |파이프 문자 감지)의 일치 항목과 대체 항목을 결합하여 s:pos($/.from)일치 변수 위치에서 일치 항목 검색을 시작합니다.$/.from

따라서 5번째와 일치하면 |해당 위치가 에 저장됩니다 $/.from. \| 00해당 위치에서 $/.from정규 표현식을 찾으면 공백 으로 바꾸세요. 그렇지 않으면 두 번째 데이터 라인의 세 번째 문자 다음에 표시된 00것처럼 문자가 변경되지 않고 그대로 유지됩니다 .|

[참고: "초기" 열을 모두 변경하지 않고 그대로 두고 "나중" 열만 바꾸려면 부사 :continue대신 :pos부사를 사용하세요.]

https://docs.raku.org/언어/regexes#index-entry-matching_adverb_:pos-matching_adverb_:p-Pos
https://raku.org

답변3

sed "s/\(\(.*|\)\{5\}[^0]*\)00/\1 /" <input.txt

의미: \(\(.*|\)\{5\}: 슬래시 5개

[^0]*다섯 번째 슬래시 이후에는 0이 아닙니다.

all to \1은 \1과 두 개의 0을 인쇄합니다.

입력 예:

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ00r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

예제 출력:

FIELD1|FIELD2|FIELD3|FIELD4|FIELD5|FIELD6
ABC|DE|GGH|Y|FFHT|rZZ  r
ABC|DE|GGH|00|FFHT|Y
ABC|DE|GGH|N|FFHT|N
ABC|DE|GGH|OO|FFHT|

관련 정보