csv와 tsv의 가공, 형식에 excel을 사용하지 마십시오

4477 단어 LinuxawkUNIXtech

대량의 로그 파일 형식으로


동료 엔지니어는 이전에 csv 파일과 tsv 파일의 형식에서 Excel을 사용했다.
(안 될 경우 vim에서 노력)
크기가 크지 않은 파일이면 좋겠지만 대량의 로그 파일 등이 있으면 곤란하다awk 지령의 사용법을 간단하게 전달할 수 있다면 기쁘기 때문에 매우 간단하더라도 흔히 볼 수 있는 조작을 기록할 수 있다.
awk에 대해서도 멋진 기사가 많으니 꼭 보세요.
https://qiita.com/yamazon/items/563af1b485ff413d381f#ofs

표시 순서 수정


예를 들어 다음 파일을 준비합니다.
20210209-00-01  1  complete
20210209-00-02  2  complete
20210209-00-03  3  complete
20210209-00-04  4  complete
20210209-00-05  5  complete
20210209-00-06  6  complete
20210209-00-09  7  complete
20210209-00-10  8  complete
20210209-00-100 9  complete
20210209-00-101 10 complete
20210209-00-102 11 complete
20210209-00-103 12 complete
20210209-00-105 13 complete
파일의 표시 순서를 변경하려면 다음 쓰기 명령 중 하나만 입력하십시오.awk '{ print $2 " " $1 " " $3 " " }' < test.txt
1 20210209-00-01 complete
2 20210209-00-02 complete
3 20210209-00-03 complete
4 20210209-00-04 complete
5 20210209-00-05 complete
6 20210209-00-06 complete
7 20210209-00-09 complete
8 20210209-00-10 complete
9 20210209-00-100 complete
10 20210209-00-101 complete
11 20210209-00-102 complete
12 20210209-00-103 complete
13 20210209-00-105 complete

출력 구분자 변경


공백 구분자의 문자열을 tab 구분자나 쉼표 구분자로 출력할 때도 쓰기입니다.OFS는 출력 세그먼트를 지정할 수 있는 Output Field Separator의 약어입니다.

쉼표 구분자

awk -v 'OFS=,' '{ print $2,$1,$3 }' < test.txt

탭 구분자

awk -v 'OFS=\t' '{ print $2,$1,$3 }' < test.txt
1,20210209-00-01,complete
2,20210209-00-02,complete
3,20210209-00-03,complete
4,20210209-00-04,complete
5,20210209-00-05,complete
6,20210209-00-06,complete
7,20210209-00-09,complete
8,20210209-00-10,complete
9,20210209-00-100,complete
10,20210209-00-101,complete
11,20210209-00-102,complete
12,20210209-00-103,complete
13,20210209-00-105,complete

모든 필드가 과잉 형식으로 출력됨


한 개의 직구로 모든 경기를 포위할 수 있다.awk '{ gsub(/[^ ]+/,"\x22&\x22"); print }' < test.txt
"20210209-00-01"  "1"  "complete"
"20210209-00-02"  "2"  "complete"
"20210209-00-03"  "3"  "complete"
"20210209-00-04"  "4"  "complete"
"20210209-00-05"  "5"  "complete"
"20210209-00-06"  "6"  "complete"
"20210209-00-09"  "7"  "complete"
"20210209-00-10"  "8"  "complete"
"20210209-00-100" "9"  "complete"
"20210209-00-101" "10" "complete"
"20210209-00-102" "11" "complete"
"20210209-00-103" "12" "complete"
"20210209-00-105" "13" "complete"
이 위에 아까 구분자를 추가하면 DB에 쉽게 가져올 수 있는 csv 파일을 만들 수 있습니다.awk -v 'OFS=,' '{ gsub(/[^ ]+/,"\x22&\x22"); print $2,$1,$3 }' < test.txt
"1","20210209-00-01","complete"
"2","20210209-00-02","complete"
"3","20210209-00-03","complete"
"4","20210209-00-04","complete"
"5","20210209-00-05","complete"
"6","20210209-00-06","complete"
"7","20210209-00-09","complete"
"8","20210209-00-10","complete"
"9","20210209-00-100","complete"
"10","20210209-00-101","complete"
"11","20210209-00-102","complete"
"12","20210209-00-103","complete"
"13","20210209-00-105","complete"

분할 문자열


필드를 지정한 문자열로 나누어 임의의 부분을 출력할 수도 있습니다.
예를 들어 20210209-00-01 부분에서 마지막 부분01만 꺼내려면 다음과 같은 내용을 입력할 수 있다.cat test.txt | awk -v 'OFS=,' '{ split($1, array, "-"); print array[3] }'
01
02
03
04
05
06
09
10
100
101
102
103
105
이번에는 주로 문자열 처리로 자주 사용하는 조작을 대략적으로 열거했다.
awk 간단한 계산 같은 것도 금방 되니까 아무래도 곤란할 때 조사해주세요!!

좋은 웹페이지 즐겨찾기