awk
我有一个关于/运算符的问题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
在awk该变量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