unix 명령은 "=" 뒤에 숫자를 인쇄합니다.

unix 명령은 "=" 뒤에 숫자를 인쇄합니다.

다음 형식의 탭으로 구분된 열이 포함된 파일이 있습니다.

AAA BBB;CCC;DDD;E=10;F=20 GGG
XXX YYY;ZZZ;DDD;E=50;F=40 PPP

EUNIX 명령 (또는) 을 사용하여 값을 인쇄해야 합니다 .F

  10
  50

답변1

cut네 번째 필드를 가져온 다음 sed등호 앞의 모든 항목을 제거 하려면 다음을 수행하세요.

cut -f 4 -d\; | sed 's/.*=//'

그러나 예제 줄은 필드를 세미콜론으로 구분하지만 탭으로 구분된 필드를 언급했습니다.

답변2

GNU grep에서는 PCRE( -P) 모드를 사용합니다.

$ grep -Po '(?<=E=)\d+' file
10
50

또는

$ grep -Po '(?<=F=)\d+' file
20
40

답변3

$ echo 'AAA BBB;CCC;DDD;E=10;F=20 GGG' | awk -F';' '{ print $4 }' | awk -F= '{ print $2 }'
10
$ echo 'XXX YYY;ZZZ;DDD;E=50;F=40 PPP' | awk -F';' '{ print $4 }' | awk -F= '{ print $2 }'
50

아니면 더 간단합니다:

$ echo 'XXX YYY;ZZZ;DDD;E=50;F=40 PPP' | awk 'match($0, /=[0-9]+/) { print substr($0, RSTART + 1, RLENGTH - 1) }'
50
$ echo 'AAA BBB;CCC;DDD;E=10;F=20 GGG' | awk 'match($0, /=[0-9]+/) { print substr($0, RSTART + 1, RLENGTH - 1) }'
10

답변4

줄의 나머지 부분에 관심이 없거나 해당 줄을 찾거나 해당 E=F=이 나타나는 곳 어디에서나 찾으려면 다음을 사용할 수 있습니다 sed.

sed -e 's/.*E=//' -e 's/;.*//'

이렇게 하면 ' ' 앞의 모든 항목(' ' 포함 E=)이 삭제되고 ' ' ;및 그 뒤의 모든 항목이 삭제됩니다. 각 행은 다음과 같이 가정합니다.하다포함하다" E=".

필드가 항상 특정 열(탭이나 세미콜론 등으로 구분된 열)에 나타나는 것을 알고 있는 경우 먼저 또는 이에 상응하는 항목을 사용하여 열을 추출한 다음 해당 부분을 값에서 분리하는 것이 E=좋습니다 . @berndbausch의 답변을 사용하여 이를 수행하거나 별도의 열을 가정하는 두 번째 호출을 사용할 수 있습니다 .cutE=sedcut=

관련 정보