我正在尝试使用 执行数学运算sed
,但它继续将我的变量视为字符串。输入是这样的:
$ echo 12 | sed 's/[0-9]*/&+3/'
$ 12+3
Run Code Online (Sandbox Code Playgroud)
我想要 15 作为输出。我只需要在一个段落中执行操作并替换其数学结果,因为我将程序作为 Python 守护程序运行,并且我想避免像重定向stdout
文件、打开这些文件、执行操作、提取结果、执行这样的段落更换。对我来说,sed
似乎最好在一行中执行所有操作。
我尝试以各种方式同时投射输入和输出,例如
$ echo 12 | sed 's/[0-9]*/int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
$ echo 12 | sed 's/[0-9]*/\int(&+3)/'
Run Code Online (Sandbox Code Playgroud)
但结果总是打印第二个字段。
如果缺少值,我想在文本文件中插入新行。例如,我有以下文本文件 (A.txt),缺少第 5 行。此外,由于文件应该有 12 行,因此第 11-12 行也丢失了。
1 2.30
2 3.01
3 3.22
4 3.34
6 3.01
7 2.90
8 2.99
9 3.00
10 3.02
Run Code Online (Sandbox Code Playgroud)
我的预期输出如下。对于缺失的情况,应添加一行,其中包含编号和 NA。如您所见,这在第 5、11 和 12 行按预期发生:
1 2.30
2 3.01
3 3.22
4 3.34
5 NA
6 3.01
7 2.90
8 2.99
9 3.00
10 3.02
11 NA
12 NA
Run Code Online (Sandbox Code Playgroud)
我可以通过使用以下脚本来做到这一点:
f1=/my-directory/
echo "new file" > "$f1"/newfile.txt
for i in {1..12}; do
l=$(awk '{print $1}' /"$f1"/A.txt | grep -wE ^$i /"$f1"/A.txt)
if grep --quiet …
Run Code Online (Sandbox Code Playgroud)