У меня есть сценарий, который использует Grep для вывода, как это:Как изменить выход GREP?
12 Apples
10 Grapes
11 Mangoes
Я хочу к выходу как
Apples: 12 Grapes: 10 Mangoes: 11
Как изменить вывод Grep?
У меня есть сценарий, который использует Grep для вывода, как это:Как изменить выход GREP?
12 Apples
10 Grapes
11 Mangoes
Я хочу к выходу как
Apples: 12 Grapes: 10 Mangoes: 11
Как изменить вывод Grep?
Вы могли бы труба в 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
вы делаете.
Вы можете использовать СЭД:
grep … | sed 's/^\([0-9]*\) \(.*\)$/\2: \1/'
Я хотел бы использовать awk
:
$ grep regex file | awk '{ printf "%s: %d ", $2, $1 }; END { printf "\n" }'
Apples: 12 Grapes: 10 Mangoes: 11
Это будет использовать printf
распечатать свои строки в указанном формате, а затем добавить новую строку в конце, так как это то, что вы, вероятно, хотите. Если вы не знакомы с awk
, $1
и $2
представляют позиционные параметры, то есть первое (в данном случае поле, разделенное пробелами), а второе.
Если вы готовы не иметь никаких пробелов вокруг двоеточия на выходе вы можете просто сделать:
$ grep ... | tr ' \012' ': '; echo
Это просто меняет пространства в колон и строки пробелов. Эхо есть, чтобы дать завершающую новую строку.
Использование 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
Это может работать для вас:
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
О, хорошо использовать '' OFS' и ORS'. Даже не приходило в голову. –