4

入力ファイルには次の行があり、2 番目のフィールドを使用して、あるファイルでは「+」記号行を使用し、別のファイルでは「-」記号行を使用してこれらを分離します。

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

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 に答える
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 に答える
2

GNU のコード:

sed '/\S\+\s\++/!D' file > plus.txt
sed '/\S\+\s\++/D' file > minus.txt
于 2013-06-23T11:03:15.803 に答える
-1

質問のタイトルは少し不明確です。すぐに編集します。一方、答えは次のとおりです。

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