我有这段代码,它可以在普通 CLI 中执行,但如何将其应用到文件中?
sort <filename> | uniq | cut -f 1 -d "," | uniq -c |sed -e "s/^[ \t]*//"
它总是告诉我类似命令未找到之类的信息。
编辑:我的命令在 CLI 中工作,但我想将其应用到 bash 脚本中。现在我的问题是如何在脚本中应用此命令,但文件名 $1 ,然后将输出保存在另一个变量中,该变量可以像文件一样逐行读取或类似。
所以我尝试使用这段bash代码和“./script.sh filename.txt”
#!/bin/bash
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
它在执行时向我显示此错误:
./filename.txt: line 1: YKL112W,YKL112W: command not found
答案1
问题是您的脚本中有语法错误。线路
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
方法:
- 将字符串分配
sort
给变量lines
- 然后,执行存储在变量中的命令,
$1
同时将输出分别通过管道传输到uniq
、cut
和。uniq
sed
由于$1
- 您提供给脚本的参数 - 包含文件名,因此 shell 会尝试执行该文件(例如,就好像它是脚本一样),即使它只是一个文本文件;因此出现错误消息。
如果要将命令的结果赋给变量line
,则需要执行“命令替换”,如下所示
lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"
我还建议使用外壳检查识别 shell 脚本的问题。