组合多个命令,如 tr、inov 和 dd

组合多个命令,如 tr、inov 和 dd

对于 shell 脚本编写新手来说,我很少有这样的命令。拥有这样的临时文件是最佳选择还是我应该尝试组合所有这些命令?如果是后者,你能帮我将输出从 dd 命令重定向到 tr 命令,然后重定向到 iconv。谢谢。

dd if=abcd.dat cbs=38 conv=块=abcd.temp

猫 abcd.temp | tr -d "\n" | tr -d "\n" | tr -d "\r" > abcd. 输出

iconv -f ASCII -t EBCDIC-US <abcd.output > abcd.ebcdic

答案1

您可以使用管道来避免各种中间文件,与tr现有命令中的情况相同。dd的默认输出(如果of未指定)可以重定向:

dd if=abcd.dat cbs=38 conv=block | tr -d "\n" | tr -d "\r" | iconv -f ASCII -t EBCDIC-US > abcd.ebcdic

两个tr命令可以组合使用:

dd if=abcd.dat cbs=38 conv=block | tr -d "\n\r" | iconv -f ASCII -t EBCDIC-US > abcd.ebcdic

答案2

一般来说,避免临时文件通常会更快,因为通过管道输出到第二个进程可以允许两个进程重叠处理。

但是,如果使用临时文件使脚本更具可读性,那么它应该是完全可以接受的(前提是脚本在完成使用这些文件后将其删除)。

我倾向于将其视为dd例外,因为它能够通过错误的参数造成如此巨大的损害。我会尽量避免在脚本中使用它。

很高兴看到古老的 EBCDIC 仍在使用!

相关内容