예제 작업:
원래의:
% 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