如何连接三个文件(并跳过一个文件的第一行)并将其作为输入发送到我的程序?

如何连接三个文件(并跳过一个文件的第一行)并将其作为输入发送到我的程序?

有文件A、B、C。我想连接文件A、B和C(跳过C的第一行)。然后将它们作为输入发送到 myProgram。我怎样才能在shell脚本中写这个?

我写的是

cat A > file
echo >> file     //want to start all contents in new line
cat B >> file
tail -n+2 C >> file
./myProgram < file 

但我不知道如何连接它们并发送到程序而不生成文件

答案1

尝试这个 :

{ cat A ; echo; cat B ; awk 'NR>1' C ; } | programm

将命令放入其中大括号分组

;如果没有换行符来完成,则不是强制性的分组

不需要另一个子外壳这里 ;)

答案2

使用进程替换

./myProgram < <(cat A; echo ''; cat B; tail -n +2 C)

<(commands)创建一个 fifo 文件,然后将其读入程序

你可以通过做测试

$ echo <(cat A; echo ''; cat B; tail -n +2 C) /dev/fd/63

支持命名管道 (FIFO) 或 /dev/fd 命名打开文件方法的系统支持进程替换。它采用<(列表)或>(列表)的形式。进程列表的输入或输出连接到 FIFO 或 /dev/fd 中的某个文件。该文件的名称作为扩展结果作为参数传递给当前命令。如果使用 >(list) 形式,写入文件将为列表提供输入。如果使用 <(list) 形式,则应读取作为参数传递的文件以获得 list 的输出。如果可用,进程替换与参数和变量扩展、命令替换和算术扩展同时执行。

答案3

使用子外壳。在子 shell 中运行命令并将输出通过管道传输到您的程序。

(cat a; echo; cat b; tail -n+2 c) | ./myProgram

答案4

awk方法

awk 'ARGIND<3;ARGIND==3&&FNR>1' a b c | ./myProgram

相关内容