我有一个脚本使用grep输出如下:
12 Apples
10 Grapes
11 Mangoes
我希望输出为
Apples: 12 Grapes: 10 Mangoes: 11
如何修改grep输出?
答案 0 :(得分:4)
你可以管道像:
$ echo "
12 Apples
10 Grapes
11 Mangoes
" | awk 'BEGIN { OFS=": "; ORS=" "; } NF >= 2 { print $2, $1; }'
Apples: 12 Grapes: 10 Mangoes: 11
当然,用你正在做的grep
替换echo cmd。
答案 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
代表位置参数,也就是说,第一个(在这种情况下,空格分隔)场,第二场。
答案 2 :(得分:1)
您可以使用sed:
grep … | sed 's/^\([0-9]*\) \(.*\)$/\2: \1/'
答案 3 :(得分:0)
如果您愿意在输出中的冒号周围没有空格,您可以这样做:
$ grep ... | tr ' \012' ': '; echo
这只是将空格更改为冒号,将换行更改为空格。回声是为了给出一个尾随换行符。
答案 4 :(得分: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
答案 5 :(得分: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