我想在stdout上print 1 + 1
(即单线编码)。
使用awk
我只需使用以下内容即可:
$ echo | awk '{print 1+1}'
2
如何使用python执行此操作?
答案 0 :(得分:8)
您正在寻找-c
:
$ python -c 'print 1 + 1'
2
答案 1 :(得分:2)
正如ifLoop指出的那样,你在这里寻找的是-c
。
但是,正如你发现的那样,python -c
通常不会与相应的awk
(或sed
或bash
或{{{{}}一样有用1}}甚至perl
)用于单行。
Python明确地设计用于重视可读性而非简洁性和显性性而不是隐含性(以及一些相关的权衡,如语法上的词汇,尽可能少的魔法等)。见the Zen of Python。对于你可以塞进一行的内容存在有意的限制,例如,在ruby
和sys.stdin
或{{{{}}} sys.argv
或{fileinput.input()
上必须明确地执行诸如循环stdin和/或命令行参数之类的操作。 1}}。
这意味着使用Python编写一些非常简单的脚本变得不那么容易,但这被认为是一个很好的权衡,即使是中等重要的脚本也更容易编写,维护和理解。
核心开发人员明白这意味着你不能用Python重写很多单行代码。如果你问他们,他们中的大多数人都会问为什么这个问题根本就存在。
如果你知道如何用sed
或awk
这样的语言写一些内容,那么你应该把它写成sed
或awk
中的单行代码{1}}。对于各种简单的任务来说,这些都是非常好的语言,并且没有理由因为Python也是一门优秀的语言而无法避免它们。
如果你无法通过语法来编写单行代码......那么,它可能不应该是单行代码。你想在Python中尝试它的唯一原因是Python通常更容易编写和阅读,同样的原因是同样的原因,Python不会让你在没有3行的情况下写出你想要的东西。所以只写3行。 Python非常适合。
所以,你经常真正想要的不是-c
,而是heredoc,或者只是像任何其他程序一样运行的单独脚本,或{{1 }或awk
代替perl
。
答案 2 :(得分:1)
如果你在shell中,那么下一个是基本的整数数学
echo $((1+1))
echo $(( 100 / 5 ))
等...
浮点数,是的,您应该使用awk
,bc
或dc
,或任何其他知道浮点数学的语言......
答案 3 :(得分:0)
受到answer by IfLoop的启发,我想知道awk中方便的BEGIN
和END
块。我找到了pawk module
ls -l | awk 'BEGIN {c = 0} {c += $5} END {print c}'
ls -l | pawk -s -B 'c = 0' -E 'c' 'c += int(f[4])'
看起来很有希望,但我从未尝试过(尚未)
答案 4 :(得分:0)
与SingleNegationElimination's回答推荐的一样,-c
标志是该作业的正确工具。
以下是使用awk,ruby和python的一些示例:
echo foo bar baz | awk '{ split($0, arr, " "); print arr[NF] }'
baz
echo foo bar baz | ruby -e 'puts STDIN.read.chomp.split(" ")[-1]'
baz
echo foo bar baz | python -c 'import sys; print sys.stdin.read().rstrip().split(" ")[-1]'
baz