다음 내용이 포함된 파일이 있습니다.
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