awk 첫 번째 패턴(포함) 뒤의 각 줄에 있는 모든 텍스트를 인쇄합니다.

awk 첫 번째 패턴(포함) 뒤의 각 줄에 있는 모든 텍스트를 인쇄합니다.

예제 작업:

원래의:

% echo -e "This is number 800 with decimal;other stuff\n44333; more data"
This is number 800 with decimal;other stuff
44333; more data

원하는 awk 결과:

% echo -e "This is number 800 with decimal;other stuff\n44333; more data" | awk
;other stuff
; more data

업데이트: 모든 답변 후: 구분 기호 ";"는 줄당 한 번만 존재하며 줄이 존재하는 경우 존재하므로 내 솔루션은 항상 작동하지만 다른 솔루션만큼 일반적이지는 않습니다(빈 줄, 구분 기호가 없는 줄 또는 여러 구분 기호가 있는 줄).

답변1

모든 Unix 시스템의 모든 쉘에서 awk 또는 sed를 사용하십시오.

awk '{sub(/[^;]*/,"")}1' file

sed 's/[^;]*//' file

그러나 위의 코드는 이를 포함하지 않는 모든 줄에 대해 빈 줄을 인쇄하므로 ;이러한 줄이 입력에 존재할 수 있는 경우 다음이 필요할 수 있습니다.

awk '{sub(/[^;]*;/,";")}1' file

sed 's/[^;]*;/;/' file

위의 내용은 ;s가 포함되지 않은 행을 있는 그대로 인쇄하거나 해당 행을 제거하기를 원한다고 가정합니다.

awk 'sub(/[^;]*;/,";")' file

sed -n 's/[^;]*;/;/p' file

답변2

awk -F ';' 'BEGIN { OFS=FS } { $1 = "" }; 1'

그러면 각 줄의 -로 구분된 필드를 읽고 ;첫 번째 필드를 빈 문자열로 설정합니다. 그런 다음 모든 줄은 무조건 출력 필드 구분 기호로 출력됩니다( 1고아 줄이 마지막에 수행하는 작업).;

귀하의 질문에 데이터가 주어지면

;other stuff
; more data

또 다른 테스트:

$ cat file
123;456;789
a b c ; d e f ; g h i

abba
;;;;
$ awk -F ';' 'BEGIN { OFS=FS } { $1 = ""; print }' file
;456;789
; d e f ; g h i


;;;;

답변3

표시된 예제를 사용하여 다음 awk코드를 시도해 보세요.

echo -e "This is number 800 with decimal;other stuff\n44333; more data" |
awk 'match($0,/^[^;]*/){ print substr($0,RSTART+RLENGTH)}'

;other stuff
; more data

답변4

단순한

% echo -e "This is number 800;other stuff\n44333; more data" | awk -F';' '{print ";"$2}'
;other stuff
; more data

관련 정보