2013-04-05 2 views
1

... 여기 한 번에 하나의 필드를 설정합니까? 구분 바, unbutchered 데이터로 일부 도살 데이터를 설정하려고

가의 일부 샘플 데이터

asd1276vdjs12897364vsk|Tue Apr 2 08:19:12 2013|[pid 3]|[words]|FAIL UPLOAD: Client "00.005.006.006"|"/0801NSJH.bbf"|0.00Kbyte/sec 

정규식 년대에

asd1276vdjs12897364vsk Tue Apr 2 08:19:12 2013 [pid 3] [words] FAIL UPLOAD: Client "00.005.006.006", "/0801NSJH.bbf", 0.00Kbyte/sec 

충분히 간단하다,하지만 난 돈 ' t는 말을하는 법을 알고있다 first field = regex, second field = regex

이 sed는 기능적이지만 일종의 해킹이다, 나는 그것을 gawk에서 작동하게하고 싶다.

sed 's/ Sun/|Sun/' 
sed 's/ Mon/|Mon/' 
sed 's/ Tue/|Tue/' 
sed 's/ Wed/|Wed/' 
sed 's/ Thu/|Thu/' 
sed 's/ Fri/|Fri/' 
sed 's/ Sat/|Sat/' 
sed 's/ Sun/|Sun/' 
sed -e 's% \[%|\[%g' -e 's%\] %\]|%g' -e 's%, %|%g' 
+0

아주 같은 정규식에 대한 규칙을 찾으려면 찾을 수 있습니다. – sp00m

+0

regex 태그를 제거했습니다. awk/gawk에 대한 질문입니다. –

+0

이 질문의 문제점은 좋은 해결책이 없다는 것입니다. 예제를 수정하는 해결책을 제공 할 수 있습니다. 입력 형식을 지정하기 위해'printf '를 사용 하겠지만 ** 파일의 다른 줄은 보장하지 않습니다. 정확히 format/no와 일치해야합니다. 필드의 예를 보여줍니다. –

답변

1
$ cat tst.awk 
{ print gensub(/\ 
([^[:space:]]+)[[:space:]]+\ 
([^[]+)[[:space:]]+\ 
([[][^]]+[]])[[:space:]]+\ 
([[][^]]+[]])[[:space:]]+\ 
([^,]+),[[:space:]]+\ 
([^,]+),[[:space:]]+\ 
/, 
"\\1|\\2|\\3|\\4|\\5|\\6|","") 
} 
$ awk -f tst.awk file 
asd1276vdjs12897364vsk|Tue Apr 2 08:19:12 2013|[pid 3]|[words]|FAIL UPLOAD: Client "00.005.006.006"|"/0801NSJH.bbf"|0.00Kbyte/sec