유닉스에서 쉼표로 구분된 파일의 특정 위치에 있는 문자와 숫자를 제거합니다.

유닉스에서 쉼표로 구분된 파일의 특정 위치에 있는 문자와 숫자를 제거합니다.

유닉스에서 쉼표로 구분된 파일의 특정 위치에서 문자와 숫자를 제거하고 싶습니다.

내 데이터는 이렇습니다

jagan1,*,*,*,*,*,W,24,25,26
jagan2,*,*,*,*,*,1,24,25,26
jagan3,*,*,*,*,*,*,24,25,26
jagan4,*,*,*,*,*,P,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

일곱 번째 위치에서는 *만 유지하고, 숫자나 문자가 있으면 줄 전체를 삭제하고 싶습니다.

다음과 같이 출력

jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

답변1

간단하게awk스크립트:

$ awk -F, '$7 == "*"' file.csv
jagan3,*,*,*,*,*,*,24,25,26
jagan5,*,*,*,*,*,*,24,25,26

  • -F,- ,입력 필드 구분 기호로 (쉼표)를 설정합니다.
  • '$7 == "*"' - 7번째 필드가 다음과 같은 행만 고려합니다.*

지우는 것불필요한라인은 다음을 사용sed방법:

$ sed -Ei '/^([^,]+,){6}[^*],/d' file.csv

답변2

그리고밀러, -I파일을 제자리에서 편집할 수 있는 옵션 포함:

mlr -I --csv --implicit-csv-header --headerless-csv-output filter '$7 == "*"' file.csv

답변3

입력 파일이 있고 in.txt일곱 번째 열에 별표가 있는 줄을 해당 파일에 복사하려면 out.txt다음 grep 명령을 사용할 수 있습니다.

grep -E '^(([[:alnum:]]+|[*]),){6}\*' in.txt > out.txt

설명: 먼저 줄의 시작 부분( ^)을 살펴본 다음 연속된 6개의 줄을 살펴보세요.영숫자 문자 또는 별표쉼표( (([[:alnum:]]+|[*]),); {6}는 반복 횟수를 정의함)가 뒤따르고 다음 문자가 별표인지 확인합니다. 그렇다면 일치하는 행이 에 복사됩니다 out.txt.

답변4

이번에는 다음을 시도해 보세요.

sed -i -Ee 's/^.*,[a-zA-Z0-9]*,[0-9]{2},[0-9]{2},[0-9]{2}$//' file && sed -i '/^$/d' file

형식이 지정된 문자열을 캡처 ...,<number or character>,<two numbers>,<two numbers>,<two numbers><end of line>하고 삭제합니다.


빈 줄 삭제

'/^$/d'

관련 정보