Как изменить вывод GREP? - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть скрипт, который использует grep для вывода, как это:

12 Apples
10 Grapes
11 Mangoes

хочу выводить как

Apples: 12 Grapes: 10 Mangoes: 11

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

Ответы [ 6 ]

4 голосов
/ 11 февраля 2012

Вы можете отправлять в awk как:

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

замена, конечно, echo cmd на grep, который вы делаете.

2 голосов
/ 11 февраля 2012

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

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

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

1 голос
/ 11 февраля 2012

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

grep … | sed 's/^\([0-9]*\) \(.*\)$/\2: \1/'
0 голосов
/ 11 февраля 2012

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

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
0 голосов
/ 11 февраля 2012

Использование 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 голосов
/ 11 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...