탭 구분 기호

탭 구분 기호

나는 이것이 간단하다고 생각하지만 그것을 수행하는 방법을 모른다.

상상하다

, , 열이 .csv포함된 파일이 있는데 , 각 열은 다음 으로 구분됩니다.id_usertextid_grouptabs

"123456789"        "Here's the field of the text, also contains comma"        "10"
"987456321"        "Here's the field of the text, also contains comma"        "10"
"123654789"        "Here's the field of the text, also contains comma"        "11"
"987456123"        "Here's the field of the text, also contains comma"        "11"

텍스트를 찾는 방법은 무엇입니까?

시도

구분 기호를 지정하는 방법을 찾고 있습니다 print $n. 그렇게 할 수 있다면 한 가지 옵션은 다음과 같습니다.

$ awk -d '\t' '{print $2}' file.csv | sed -e 's/"//gp'

-d옵션의 구분 기호는 어디에 있으며 제거됩니다 print.sed"

답변1

탭 구분 기호

자르다

sedor 이 필요하지 않으며 awk간단한 방법으로 cut수행됩니다.

cut -f2 infile

awk를 사용하려면 매개변수 -FFS=접미사를 통해 구분 기호를 제공하는 방법이 있습니다.

awk -F '\t' '{ print $2 }' infile

또는:

awk '{ print $2 }' FS='\t' infile

모든 경우의 출력:

"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"
"Here's the field of the text, also contains comma"

인용 구분 기호

파일에서 큰따옴표가 일관적인 경우, 즉 필드에 큰따옴표가 포함되어 있지 않은 경우 이를 구분 기호로 사용하고 출력에서는 사용하지 않을 수 있습니다. 예를 들면 다음과 같습니다.

자르다

cut -d\" -f4 infile

awk -F\" '{ print $4 }' infile

두 경우 모두 출력:

Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma

답변2

grepPCRE( )와 함께 사용할 수 있습니다 -P.

grep -Po '\s"\K[^"]+(?="\s)' file.txt
  • \s"뒤에 공백이 있으면 일치하고 일치 항목을 삭제합니다 ".\K

  • [^"]+"두 s 사이에서 원하는 부분을 가져옵니다 .

  • (?="\s)"필수 부분 뒤에 공백 문자가 오는지 확인하는 너비가 0인 긍정적인 예측 모드입니다 .

예:

$ grep -Po '\s"\K[^"]+(?="\s)' file.txt 
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma
Here's the field of the text, also contains comma

답변3

tab구분 기호로 지정

$ awk -F '\t' '{print $2}' file.csv

가서 원하지 않는 것을 가져가세요"

$ awk -F '\t' '{print $2}' file.csv | sed 's/"//g'

다른 옵션 사용awk -F

$ awk -F '"' '{print $4}' file.csv

답변4

귀하의 sed 부분이 정확합니다. awk -F '\t'다음을 사용하거나 사용할 수 있습니다 .

awk 'BEGIN{FS="\t"} {print $2}' file.csv | sed 's/"//g'

또는 sed를 사용하지 않으려면 첫 번째 awk의 출력을 두 번째 awk로 파이프한 다음 '"'를 필드 구분자로 사용한 다음 두 번째 필드를 인쇄할 수 있습니다.

awk 'BEGIN{FS="\t"} {print $2}' file.csv | awk -F "\"" '{print $2}'

관련 정보