파일에서 필드 정리

파일에서 필드 정리

a.txt 파일의 내용

Event: "112506400","17","2016/07/13-15-25-59.00",,,,,,,,,,,"112506400","115101234","02:00:00","pc","abc","4194","file_nam","F",,,"LA
",,"jk","123",,,,,,,,,,

$20 ( file_name )이 asort.txt 로 리디렉션되지 않은 파일이 필요합니다. 현재 아래를 사용하고 있으므로 짧은 명령이 있습니까?

cat a.txt | grep Event: |awk -F, '{print $1","$2","$3","$4","$5","$6","$7","$8","$9","$10","$11","$12","$13","$14","$15","$16","$17","$18","$19","$21","$22","$23","$24","$25","$26","$27","$28","$29","$30","$31","$32","$33","$34","$35","$36","$37}'> asort.txt

답변1

아마도 cut 명령이 다음을 수행할 수 있을 것입니다:

cat a.txt | cut -d "," -f 1-19,21-37

따라서 쉼표가 안정적인 구분 기호라고 가정하여 필드 #20을 건너뜁니다.

답변2

이것은 작동합니다:

grep Event: a.txt | awk 'BEGIN{FS=OFS=","}{$20=""; print}' > asort.txt

답변3

~와 함께sed

$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){2})[^,]*,/\1/'
a,,c,d
$ echo 'a,,b,c,d' | sed -E 's/^(([^,]*,){3})[^,]*,/\1/'
a,,b,d
  • [^,]*,0개 이상의 쉼표가 아닌 텍스트 뒤에 쉼표가 옵니다.
  • {2}또는 {3}이전 그룹을 두세 번 삭제하려면 열 번호를 사용하여 마이너스 1을 삭제하세요.

perl정규식 패턴을 재사용할 수 있다는 점만 제외 하면 비슷합니다.

$ # (?2) refers to ([^,]*,)
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){2})(?2)/$1/'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^(([^,]*,){3})(?2)/$1/'
a,,b,d

$ # golfed with lookbehind
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){2}\K(?1)//'
a,,c,d
$ echo 'a,,b,c,d' | perl -pe 's/^([^,]*,){3}\K(?1)//'
a,,b,d

관련 정보