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
스크립트는 두 개의 연속된 부분을 찾습니다.
- 공백과 ; 사이에는
:
공백이 아닌 문자가 있어야 합니다(0보다 큼). =
; 뒤에 공백이 아닌 문자(0보다 큼)가 옵니다.
실행 중인 명령에서 파이프로 연결됩니다.bash