linux - 制作 bash 脚本以接受来自文件的输入或管道输出

标签 linux bash unix pipe

我有以下 bash 脚本,它将表格数据作为输入, 获取第一行并垂直吐出它们:

#!/bin/bash  
# my_script.sh
export LC_ALL=C
file=$1
head -n1  $file |
tr "\t" "\n" |
awk '{print $1 " " NR-1}'

问题是我只能这样执行:

$ myscript.sh some_tab_file.txt 

我想做的是在上述能力之上还允许你这样做:

$ cat some_tab_file.txt myscript.sh | myscript.sh 

即从管道输出中获取。我怎样才能做到这一点?

最佳答案

我通常会写:

export LC_ALL=C
head -n1 "$@" |
tr "\t" "\n" |
awk '{print $1 " " NR-1}'

这适用于任意数量的参数,如果没有则没有。使用 "$@" 在此和许多其他上下文中很重要。请参阅 special parameters 上的 Bash 手册和 shell parameter expansion有关可用于控制如何处理 shell 参数的许多不同符号的更多信息。通常,双引号是个好主意,尤其是当文件名可能包含空格时。

关于linux - 制作 bash 脚本以接受来自文件的输入或管道输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22801641/

相关文章:

android - Linux操作系统下的2D安卓游戏开发工具

c - 在运行时替换动态共享库

regex - 使用 awk 在非字母数字字符上拆分字符串

C:尝试在屏幕上打印数据后出现段错误

shell - 在文件中查找和替换并覆盖文件不起作用,它会清空文件

linux - Nginx 访问服务器上的文件时返回 404 not found

linux - cmake:如何抑制 "Entering directory"消息?

BASH 测试存在目录,变量作为路径

Bash:将文本 append 到文件的最后一行

python - 如何比较一个文件中的多行并输出组合条目