Жеке файлдардағы нақты үлгілермен сызықтарды шығарыңыз

Кіріс файлында келесі жолдар бар және оларды бір файлдағы 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
жоғарыдағы сызықтарды 2-ші өріске негізделген екі файлға бөлуге болады, ол awk функциясын қолданатын '+' және '-' символына ие ...
қосылды автор doc, көзі
$ 2 «-», a = $ 1-500 және b = $ 1 + 500 болған кезде $ 2 «+», a = $ 1 + 500 және b = $ 1-500 болғанда мүмкін бе? 'a' және 'b' - жаңа айнымалылар.
қосылды автор doc, көзі

7 жауаптар

Басқа нұсқа

awk 'BEGIN{m["+"]="plus.txt";m["-"]="minus.txt"} $2 ~ /^[+-]$/{print>>m[$2]}' 
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
5
қосылды

Бұл file1 және файл2 ішіндегі басқа файлдардағы «+» сызықтары болады:

awk '{print > ("file" ($2~/+/?1:2))}' file
4
қосылды
Сіз «жаңа айнымалыларға тағайындау» арқылы нені білдіреді? Тек қана сұрақты жаңа талаптармен бірге жаңартып, үлгі енгізу және күткен нәтиже немесе жаңа сұрақты ашыңыз.
қосылды автор Ed Morton, көзі
+1 Енді бұл идиоматикалық! :)
қосылды автор jaypal singh, көзі
Сәлеметсіз бе, Эд Мортон, енді «+» белгісі бар 1-ші өрісті алып, 500-ге қосып, әрқайсысы 500-ні жазып алып, жаңа айнымалыларға тағайындалсын.
қосылды автор doc, көзі

Бұл шешім f1 және f2 файлдарына шығарады.

awk '{ if ($2 == "+") print >>"f1"; else if ($2=="-") print >>"f2"; }' datafile
4
қосылды

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.
2
қосылды
Сәлем, sudo_O, енді маған «+» белгісі бар 1-ші өрісті алып, 500-ге қосып, әрбір 500 жазбаны шығарып, жаңа айнымалыларға тағайындалу керек.
қосылды автор doc, көзі

GNU коды :

sed '/\S\+\s\++/!D' file > plus.txt
sed '/\S\+\s\++/D' file > minus.txt
2
қосылды

Сұрақтың тақырыбы біраз түсініксіз, оны бір сәтте өңдеймін. Сонымен қатар мұнда:

awk '/^[0-9]+ \+/{print > "a"} /^[0-9]+ -/{print > "b"}'
1
қосылды
@Nirk OK, менің ойымша, бірінші нөмір тек қана кірістіру файлының бір бөлігі емес, редактордың кірістірілген жолының нөмірі болды деп ойладым. Мұны өңдеу үшін өрнекті бекіту.
қосылды автор Michał Kosmulski, көзі
'$ 2 ==' + '{print> «a»} $ 2 == «-» {print> «b»}'
қосылды автор SheetJS, көзі