awk 또는 sed를 사용하여 특정 패턴이 있는 줄의 일부를 추출합니다.

awk 또는 sed를 사용하여 특정 패턴이 있는 줄의 일부를 추출합니다.

awk/operator 에 대해 질문이 있습니다 sed. 다음 줄이 반복되는 큰 파일이 있습니다.

Expression loweWallrhoPhi :  sum=-6.97168e-09
Expression leftWallrhoPhi :  sum=6.97168e-09
Expression lowerWallPhi :  sum=-5.12623e-12
Expression leftWallPhi :  sum=5.12623e-12
Expression loweWallrhoUSf :  sum=-6.936e-09
Expression leftWallrhoUSf :  sum=6.97169e-09
Expression lowerWallUSf :  sum=-5.1e-12
Expression leftWallUSf :  sum=5.12624e-12

sum각 경우의 키워드 다음에 나오는 값을 별도의 파일로 추출하고 싶습니다 . 한 번에 가능할까요?

답변1

그리고 grep:

grep -oP 'sum=\K.*' inpufile > outputfile

-P이전에 일치한 문자를 무시하기 위한 (perl-regexp) 매개변수를 사용한 grep 지원 \K.

그리고 awk:

awk -F"=" '{ print $NF; }' inputfile > outputfile

존재하다이 변수는 NF현재 레코드/행의 총 필드 수를 나타내며 마지막 필드 번호를 가리키므로 그에 $NF따라 값이 지정됩니다.

그리고 sed:

sed 's/^.*sum=//' inpufile > outputfile

^.*=sum.*줄의 첫 번째 문자( )와 마지막 문자( ) ^사이의 모든 문자( )를 sum=공백 문자로 바꿉니다.

결과:

-6.97168e-09
6.97168e-09
-5.12623e-12
5.12623e-12
-6.936e-09
6.97169e-09
-5.1e-12
5.12624e-12

그리고 cut:

cut -d'=' -f2 inputfile > outputfile

동일한 값을 동일한 파일에 별도로 저장하려면 awk다음과 같이 할 수 있습니다.

awk -F"=" '{print $NF >($NF); }' inputfile > outputfile

답변2

질문을 올바르게 이해했다면 그 이후의 값만 가져와 =두 번째 필드(?)를 기반으로 별도의 파일에 저장하기를 원할 것입니다. 내가 옳다면 다음과 같이 시도해보십시오.

$ awk -F'[ =]' '{print $6>"file_"$2".txt"}' file

결과:

$ ls -1
  file_leftWallPhi.txt
  file_leftWallUSf.txt
  file_leftWallrhoPhi.txt
  file_leftWallrhoUSf.txt
  file_loweWallrhoPhi.txt
  file_loweWallrhoUSf.txt
  file_lowerWallPhi.txt
  file_lowerWallUSf.txt

$ cat  file_leftWallPhi.txt
  5.12623e-12

답변3

당신은 이것을 할 수 있습니다sed

sed -E 's/^.* (\S+)\s*:.*=(\S+)/echo "\2" > "\1".txt/' file | bash

스크립트는 두 개의 연속된 부분을 찾습니다.

  1. 공백과 ; 사이에는 :공백이 아닌 문자가 있어야 합니다(0보다 큼).
  2. =; 뒤에 공백이 아닌 문자(0보다 큼)가 옵니다.

실행 중인 명령에서 파이프로 연결됩니다.bash

관련 정보