2012-02-10 2 views
0

У меня есть сценарий, который использует Grep для вывода, как это:Как изменить выход GREP?

12 Apples 
10 Grapes 
11 Mangoes 

Я хочу к выходу как

Apples: 12 Grapes: 10 Mangoes: 11 

Как изменить вывод Grep?

ответ

4

Вы могли бы труба в AWK как:

$ echo " 
12 Apples 
10 Grapes 
11 Mangoes 
" | awk 'BEGIN { OFS=": "; ORS=" "; } NF >= 2 { print $2, $1; }' 
Apples: 12 Grapes: 10 Mangoes: 11 

замена, конечно, эхо-CMD с grep вы делаете.

+1

О, хорошо использовать '' OFS' и ORS'. Даже не приходило в голову. –

1

Вы можете использовать СЭД:

grep … | sed 's/^\([0-9]*\) \(.*\)$/\2: \1/' 
2

Я хотел бы использовать awk:

$ grep regex file | awk '{ printf "%s: %d ", $2, $1 }; END { printf "\n" }' 
Apples: 12 Grapes: 10 Mangoes: 11 

Это будет использовать printf распечатать свои строки в указанном формате, а затем добавить новую строку в конце, так как это то, что вы, вероятно, хотите. Если вы не знакомы с awk, $1 и $2 представляют позиционные параметры, то есть первое (в данном случае поле, разделенное пробелами), а второе.

0

Если вы готовы не иметь никаких пробелов вокруг двоеточия на выходе вы можете просто сделать:

 
$ grep ... | tr ' \012' ': '; echo 

Это просто меняет пространства в колон и строки пробелов. Эхо есть, чтобы дать завершающую новую строку.

0

Использование ghc:

$> cat ./text 
12 Apples 
10 Grapes 
11 Mangoes 

$> cat ./text | ghc -e "getContents >>= putStrLn . concatMap ((\(num,name) -> (drop 1 name) ++ \": \" ++ num ++ \" \") . break (== ' ')) . lines" 
Apples: 12 Grapes: 10 Mangoes: 11 
0

Это может работать для вас:

echo -e "12 Apples\n10 Grapes\n11 Mangoes" | 
sed ':a;$!{N;ba};s/\(\S*\) \(\S*\)\n*/\2: \1 /g' 
Apples: 12 Grapes: 10 Mangoes: 11