我创建了一个名为am.sh
的shell脚本,该脚本创建文本并将其放置到文件中。我现在想创建另一个脚本,该脚本将接受am.sh
创建的文本文件,例如words.txt
和一个数字,因此使用以下命令:
./bm.sh words.txt 5
将输出words.txt
文件中包含的前5个单词。
到目前为止,我所做的所有脚本仅使用一个参数,因此我感到非常困惑。到目前为止,我想到的是:
#!/bin/sh
grep '[A-Za-z]' | while read
do
echo " $a "
done
但是我需要一种方法来接受用户想要的单词数,然后需要创建一个循环,该循环将从文本文件输出。
答案 0 :(得分:0)
这对我有用:
#!/bin/sh
file=$1
word_count=$2
fields=$(echo $(seq 1 $word_count) | sed 's/\s/,/g')
head -n 1 $file | cut -d ' ' -f$fields
位置参数1($1
)必须是第一个脚本创建的文件的文件名。第二个($2
)是应该打印的单词数。
我假设单词之间用一个空格分隔。
答案 1 :(得分:0)
假设am.sh
生成的文件每行只有一个单词,那么您可以使用:
#!/bin/sh
[ $# = 2 ] || { echo "Usage: $(basename "$0" .sh) file numlines" >&2; exit 1; }
sed "${2}q" "$1"
第一行代码检查是否有两个参数,并指示如何使用该命令,如果没有,则退出并显示错误状态。
第二行使用sed
打印文件的第一行。同样,您可以使用head
打印文件的第一行:
head -n "$2" "$1"
如果文件每行包含多个单词,则可以使用:
tr -s '[[:space:]]' '\n' < "$1" |
sed "${2}q"
(或head -n "$2"
)。
请注意,脚本不会验证$1
是可读文件,也不验证$2
是大于零的整数。