awk로 밑줄이있는 줄을 어떻게 나눌 수 있습니까?

이 줄이 있지만 각 부분을 분리하고 싶습니다.이 분리를 awk로 수행하고 싶습니다.

The 원래 줄은 다음과 같습니다.

3302491505_8139829707_13970101.csv 

그리고 출력으로 원하는 것은 다음과 같습니다.

8139829707 

또는 이것 :

3302491505 

댓글

  • 원하는 것 : awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"?
  • 아니요 그중 하나만 인쇄하겠습니다. 8139829707 또는 3302491505
  • _를 필드 구분자로 사용 하시겠습니까? 약간의 노력

답변

이 작업은 잘라내기로 수행 할 수 있습니다.

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707 

답변

시도 :

awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv" 

-F는 필드 구분자를 _ 또는 .로 설정합니다. $1$2 필드를 설정할 수 있습니다.

댓글

  • 전체 행을 인쇄합니다.

답변

모든 부분을 개별적으로 인쇄합니다.

$ awk -F"[_.]" "{print $1; print $2; print $3; print $4}" <<< "3302491505_8139829707_13970101.csv" 3302491505 8139829707 13970101 csv 

원하는 입력란 만 사용하세요.

$ awk -F"[_.]" "{ print $3;}" <<< "3302491505_8139829707_13970101.csv" 13970101 

답변

echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}" 

_ 또는 . 그런 다음 필요한 필드를 인쇄하십시오.

  • $1 첫 번째 필드 : 3302491505
  • $2 두 번째 필드 : 8139829707
  • $3 세 번째 필드 : 13970101

답변

Bourne 유사 쉘에는 문자열을 분할하는 기본 제공 방법이 있습니다. 이것이 바로 매개 변수 확장을 인용하지 않고 그대로두면 일어나는 일이며, 이것이 발생하지 않기를 원할 때 너무 많은 버그의 원인이됩니다.

실제로 사용할 때만 사용하는 것이 공정 해 보입니다. 필요합니다.

IFS=_ # split on _ set -o noglob # leaving a parameter expansion unquoted also # involves filename generation which we don"t want here var=3302491505_8139829707_13970101.csv set -- $var # $var unquoted means its split printf "%s: %s\n" First "$1" Second "$2" Third "$3" 

일부 셸에는 문자열을 분할하는 번거로운 방법이 덜 있습니다.

zsh :

var=3302491505_8139829707_13970101.csv non_empty_parts=(${(s:_:)var}) parts=("${(@s:_:)var}") 

또는 직접 :

printf "%s\n" "Second part: ${${(s:_:)var}[2]}" 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다