在单独的文件中提取具有特定模式的行

时间:2013-06-23 08:55:51

标签: regex perl sed awk pattern-matching

输入文件包含以下行,并使用一个文件中的第二个字段“+”符号行和另一个文件中的“ - ”符号行隔离这些行:

24 +  I am the Five man    
22 -  Who are you?  The new number two!    
51 +  . . . And four on the floor    
42 +    
16 -  Who is number one?    
33 -  I three you.

当$ 2为'+',a = $ 1 + 500且b = $ 1-500时,$ 2是' - ',a = $ 1-500,b = $ 1 + 500? 'a'和'b'是新变量。

7 个答案:

答案 0 :(得分:5)

另一个选择

awk 'BEGIN{m["+"]="plus.txt";m["-"]="minus.txt"} $2 ~ /^[+-]$/{print>>m[$2]}' 

答案 1 :(得分:5)

使用Perl:

perl -lne '/^\d+ -/ && print(STDERR) || print' input 2> minus > plus

略有不同的形式:

perl -lpe 'select(/^\d+ -/?STDERR:STDOUT)' input 2> minus > plus

也可以使用tee

tee >(sed -n '/^[0-9]* -/p' > minus) < input | \
   sed -n '/^[0-9]* +/p' > plus

答案 2 :(得分:4)

此解决方案将输出过滤到文件f1和f2。

awk '{ if ($2 == "+") print >>"f1"; else if ($2=="-") print >>"f2"; }' datafile

答案 3 :(得分:4)

这会将“+”行放在file1中,其他行放在file2中:

awk '{print > ("file" ($2~/+/?1:2))}' file

答案 4 :(得分:2)

GNU代码

sed '/\S\+\s\++/!D' file > plus.txt
sed '/\S\+\s\++/D' file > minus.txt

答案 5 :(得分:2)

使用awk您只需执行以下操作:

awk '$2=="+"{print>"f1";next}{print>"f2"}' file

<强>演示:

$ cat file
24 +  I am the Five man
22 -  Who are you?  The new number two!
51 +  . . . And four on the floor
42 +
16 -  Who is number one?
33 -  I three you.

$ awk '$2=="+"{print>"f1";next}{print>"f2"}' file

$ cat f1
24 +  I am the Five man
51 +  . . . And four on the floor
42 +

$ cat f2
22 -  Who are you?  The new number two!
16 -  Who is number one?
33 -  I three you.

答案 6 :(得分:-1)

问题的标题有点不清楚,我马上就会编辑它。同时这里是答案:

awk '/^[0-9]+ \+/{print > "a"} /^[0-9]+ -/{print > "b"}'