4

输入文件有以下几行,并使用一个文件中的第二个字段“+”符号行和另一个文件中的“-”符号行来分隔它们:

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' 是新变量。

4

7 回答 7

5

另外一个选项

awk 'BEGIN{m["+"]="plus.txt";m["-"]="minus.txt"} $2 ~ /^[+-]$/{print>>m[$2]}' 
于 2013-06-23T10:34:22.827 回答
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
于 2013-06-23T11:08:02.140 回答
4

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

awk '{ if ($2 == "+") print >>"f1"; else if ($2=="-") print >>"f2"; }' datafile
于 2013-06-23T09:33:22.073 回答
4

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

awk '{print > ("file" ($2~/+/?1:2))}' file
于 2013-06-23T21:58:47.120 回答
2

GNU 的代码:

sed '/\S\+\s\++/!D' file > plus.txt
sed '/\S\+\s\++/D' file > minus.txt
于 2013-06-23T11:03:15.803 回答
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.
于 2013-06-23T13:48:35.830 回答
-1

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

awk '/^[0-9]+ \+/{print > "a"} /^[0-9]+ -/{print > "b"}'
于 2013-06-23T09:13:17.407 回答