繁体   English   中英

如何修改GREP输出?

[英]How to modify GREP output?

我有一个脚本使用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 

当然,用您正在执行的grep替换echo cmd。

我会用awk

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

这将使用printf将行打印为指定格式,然后在末尾添加换行符,因为这可能是您想要的。 如果您不熟悉awk ,则$1$2表示位置参数 ,即第一个(在这种情况下为空格分隔)字段,第二个字段。

您可以使用sed:

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

如果您愿意在输出中的冒号周围没有空格,可以执行以下操作:

$ 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM