awk linux를 사용하여 하위 문자열 추출

awk linux를 사용하여 하위 문자열 추출

다음 내용이 포함된 파일이 있습니다.

Text1 , Text11  : APC signal 0 , prev=7
Text2 , Text22  : APC signal 1 , prev=0
Text3 , Text33  : APC signal 0 , prev=1
Text4 , Text44  : APC signal 1 , prev=0
Text5 , Text55  : APC signal 0 , prev=1
Text6 , Text66  : APC signal 1 , prev=0

첫 번째와 세 번째 열을 추출하고 싶지만 두 번째 열(":" 뒤의 두 번째 부분)의 하위 문자열만 추출하고 싶습니다.

내가 원하는 결과:

Text1 ,  APC signal 0 , prev=7
Text2 ,  APC signal 1 , prev=0
Text3 ,  APC signal 0 , prev=1
Text4 ,  APC signal 1 , prev=0
Text5 ,  APC signal 0 , prev=1
Text6 ,  APC signal 1 , prev=0

답변1

사용sed

sed 's/, [^:]*:/, /' file

,이렇게 하면 쉼표와 공백( )으로 시작하고 콜론이 아닌 가능한 많은 수( [^:]*)가 나온 다음 콜론 자체( ) 가 오는 텍스트를 검색합니다 :. 그런 다음 ,원하는 출력을 얻으려면 쉼표와 공백( )으로 바꾸십시오 .

Text1 ,  APC signal 0 , prev=7
Text2 ,  APC signal 1 , prev=0
Text3 ,  APC signal 0 , prev=1
Text4 ,  APC signal 1 , prev=0
Text5 ,  APC signal 0 , prev=1
Text6 ,  APC signal 1 , prev=0

실제로 첫 번째 쉼표 뒤에 두 개의 공백이 표시되는 것을 원하지 않으면 두 번째 쉼표 공백( ,)을 단일 쉼표( ,)로 변경합니다.

답변2

사용 awk:

$ awk -F, '{sub(/.*:/, "", $2); }1' OFS="," file
Text1 , APC signal 0 , prev=7
Text2 , APC signal 1 , prev=0
Text3 , APC signal 0 , prev=1
Text4 , APC signal 1 , prev=0
Text5 , APC signal 0 , prev=1
Text6 , APC signal 1 , prev=0

내장된 awk기능아들작동 원리는 입니다 sub(regexp, replacement [, target]).

답변3

이렇게 사용하세요:

$ awk -F' , | : ' -vOFS=' , ' '{print $1, $3, $4}' file
-------8<------------------
Text1 , APC signal 0 , prev=7
Text2 , APC signal 1 , prev=0
Text3 , APC signal 0 , prev=1
Text4 , APC signal 1 , prev=0
Text5 , APC signal 0 , prev=1
Text6 , APC signal 1 , prev=0

관련 정보