2013-06-23 19 views
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'是新的變量。

+0

是有可能分離上面的行中的兩個文件基礎上第二字段,它具有「+」和「 - 」符號使用AWK ... – doc

+0

是有可能當$ 2是'+'時,a = $ 1 + 500和b = $ 1-500,同時$ 2是' - ',a = $ 1-500和b = $ 1 + 500? 'a'和'b'是新的變量... – doc

回答

4

這將使 「+」升分級表中file1和file2中其它:

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

+1現在,這是慣用的! :) –

+1

你好,Ed Morton,現在我需要把第一個帶有'+'符號的字段加上500,每個記錄減去500,並賦給新的變量。 – doc

+0

「分配給新變量」是什麼意思?只需更新您的問題以及您的新需求以及樣本輸入和預期輸出,或者打開一個新問題。 –

-1

問題的標題有點不清楚,我馬上編輯一下。同時答案如下:

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

你的意思是''$ 2 ==「+」{print>「a」} $ 2 ==「 - 」{print>「b」}'' – SheetJS

+0

@Nirk好的,我認爲第一個數字只是編輯器插入的行號,而不是輸入文件的一部分。修復表達式來處理這個問題。 –

4

該解決方案將輸出過濾爲文件f1和f2。

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

另一種選擇

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

代碼GNU

sed '/\S\+\s\++/!D' file > plus.txt 
sed '/\S\+\s\++/D' file > minus.txt 
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

隨着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. 
+0

你好sudo_O,現在我需要帶有'+'符號的第一個字段,並通過添加500和減去每個記錄的500來分配給新變量。 – doc