我有以下 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/