划分列并将值作为标准输入提交到脚本中的单独程序中

划分列并将值作为标准输入提交到脚本中的单独程序中

我目前有两个用 C 编写的程序,名为“删除”和“计算”。

当我调用 ./remove 时,它​​会从标准输入中删除一些数据。当我调用 ./calculate 时,它​​接受一个参数以及来自标准输入的数据并计算并返回一个值。

目前正在编写一个调用这两个程序的脚本。

我用以下内容调用我的脚本:

./calc.sh input.txt 2 3 4 5

其中 input.txt 有:

abcd:1,2:3,4
efgh:5,4:4,4
hijk:3,1:4,9

运行 ./remove 程序返回

abcd:1,2:3,4
efgh:5,4:4,4

我的脚本目前是:

./remove "$1" | ./calculate "$1" "$2" "$3" "$4" < awk -F ':,' '

如何修复脚本,以便从 ./remove 程序返回的整数列中选择值,并将其逐行提交到 ./calculate 作为 stdin 以及带有参数的“2 3 4 5”?

答案1

如果我正确理解你的目标,那么你已经很接近了。尝试

#!/bin/sh
filename=$1
shift
./remove "$filename" | awk -F '[:,]' '{print $2, $3, $4, $5}' | ./calculate "$@"

你需要说-F '[:,]' 因为每个字段分隔符是任何一个一个:,。  awk -F ':,'期望字段分隔符是 string :,,如下所示

field1:,field2:,field3

shift命令从参数列表中删除$1(即文件名),并扩展为、、和。input.txt"$@"2345

答案2

尝试

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }' | bash

在哪里

  • awk将生成命令行到标准输出
  • 并将其提供给bash(或任何 shell )

你可以通过简单地运行来测试

./remove $1 |  awk -F '[:,]' '{ printf "./calculate %d %d %d %d\n",$2,$3,$4,$5 }'

然而,

当我调用 ./calculate 时,它​​接受一个参数以及来自标准输入的数据并计算并返回一个值。

你能解释一下必须提供什么输入吗./calculate?在上面的构造中,我假设计算不使用输入。

相关内容