2016-09-23 42 views
0

我有一個好主意,我可以在這裏做什麼,使用grep -v '^--'grep -A 1,但我想我可能需要使用awk來匹配。不包含字符串和輸出線的處理線不足以匹配線

我有一個看起來像這樣的數據:

Random text line 1 
--Data1 
Random text line 2 
--Data2 
Random text line 3 
--Data3 
Random text line 4 
--Data4 
Random text line 5 
--Data5 

的事情是,我需要運行一個命令 - 讓我們把它所有線路上不啓動command1「 - 」,捕捉隨着輸出它下面的線。

於是三個命令我想結合是:

grep -v '^--' file.txt | command1 > text-output

grep -A 1 [not sure] > --data-below-text

我大概可以通過在while read line; do命令的類型存儲變量做到這一點,然後存儲和回聲變量。不過,我覺得有可能是更有效的方式來獲得以下一個簡單的方法:

Random text line 1, text-output, --Data1 
Random text line 2, text-output, --Data2 
Random text line 3, text-output, --Data3 
Random text line 4, text-output, --Data4 
Random text line 5, text-output, --Data5 

當然,如果使用的變量是唯一的出路,我願意這樣做也是如此。我只是想確定一下,因爲我知道如果我決定在路上平行使用代碼,那麼變量會變得很冒險。任何方向都不勝感激。

+0

您是否需要針對每條單獨或整體的每條線路運行command1? –

+0

僅限於不以' - '開頭的行,換句話說,所有的隨機文本行。這是有點棘手,因爲我需要處理隨機文本行,捕獲輸出和它下面的'數據'行: -/ – DomainsFeatured

回答

1

這裏有一個辦法:

command_wrapper(){ 
    in=$(cat -) 
    one=$(echo "$in" | head -n1) 
    two=$(echo "$in" | tail -n1) 
    result=$(echo "$one" | command1) 
    echo "$one, $result, $two" 
} 

grep -A1 -v '^--' file.txt | command_wrapper 

這裏的另一種方式:

textlines=$(grep -v '^--' file.txt) 
results=$(echo "$textlines" | command1) 
datalines=$(grep '^--' file.txt) 
paste <(echo "$textlines") <(echo "$results") <(echo "$datalines") | 
    tr '\t' ',' > output.txt 
+1

嘿韋伯,第二個適合我。我只是在變量上加了雙引號。我想沒有辦法沒有變數。謝謝您的幫助。我不會想到自己粘貼。如果你得到第二個,請快點。 – DomainsFeatured

0

下面是AWK的方式,應該做你以後..

$ cat yourcommand 
echo "printing : [email protected]" 

:~/test/awk$ awk '!/^--/ { cmd = "./yourcommand "$0 ; cmd | getline outvar ; print outvar } /^--/ { print }' 1 
printing : Random text line 1 
--Data1 
printing : Random text line 2 
--Data2 
printing : Random text line 3 
--Data3 
printing : Random text line 4 
--Data4 
printing : Random text line 5 
--Data5 

我們匹配所有行都不以 - 開頭,並將該行的輸出傳遞給「./yourcommand」 - 在我的情況下,只是將「printing:」前置到「t」他行 - 但你應該能夠用你自己的輸入命令來替換。

awks getline然後將輸出存儲在outvar中,然後打印出來。開始的行 - 正常打印。

編輯:getline只得到下一行。讓我知道你是否有更多的線條可以提取,我應該能夠讓它給你剩下的部分。

+0

嘿LineDash,這不適合我。當我嘗試將輸出作爲命令讀取時,我得到一個語法錯誤。 – DomainsFeatured

+0

你能給我你得到的輸出和你正在運行的命令嗎? – linedash

相關問題