다음 형식의 탭으로 구분된 열이 포함된 파일이 있습니다.
AAA BBB;CCC;DDD;E=10;F=20 GGG
XXX YYY;ZZZ;DDD;E=50;F=40 PPP
E
UNIX 명령 (또는) 을 사용하여 값을 인쇄해야 합니다 .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의 답변을 사용하여 이를 수행하거나 별도의 열을 가정하는 두 번째 호출을 사용할 수 있습니다 .cut
E=
sed
cut
=