배경:
mysql 가져오기를 위해 모든 로그가 csv로 전송됩니다.
다음 데이터를 포함하는 로그가 많이 있습니다.
Moon,Srv-1,2016-04-04 06:59:48,Entry #103 (s) test (AlphaNum_Need_This_32_Char_Long1),Msg On (ref2357 : Act)
Moon,Srv-2,2016-03-04 06:59:48,Entry #2 SomeLongtest (AlphaNum_Need_This_32_Char_Long2),Msg On (ref2357 : Act)
질문:
추출 방법:
AlphaNum_Need_This_32_Char_Long1 AlphaNum_Need_This_32_Char_Long2
또는
부품을 폐기합니다
Entry #103 (s) test
.=> 문제는 이 텍스트의 길이와 문자가 alpha, num,
( { } [ ] ( ) / \ . < ># @ _ -
현재 진행 상황:
sed
다른 모든 필드를 사용하고 추출할 수 있습니다awk
.Excel에서는 이렇게 하면 {텍스트가 D4인 경우} 문제가 해결됩니다.
=MID(D4,SEARCH("),",D4)-32,32)
지금까지 저는 MS Logparser를 사용하여 문자열을 뒤집고 32자 수를 검색하는 등의 작업을 해왔습니다.
표적:Windows 로그 파서를 사용하지 말고 Linux에서 모두 수행하십시오.
답변1
sed -r 's/^.*\((.{32})\).*$/\1/' filename
답변2
Perl에서는 음수 인덱싱을 사용하면 오른쪽부터 문자 수를 셀 수 있습니다.
perl -aF, -lne 'print substr $F[3], -33, 32' < input
-n
입력을 한 줄씩 읽습니다.-a
@F
입력을 배열 로 분할-F
분할할 항목 지정-l
인쇄할 줄 바꿈 추가