我有一个这样的文件:
true
我想修剪此文件:删除第二列中包含值的行< 1000.修剪后,文件应如下所示:
1 4014 1.97676 1 1
1 4014 1.97676 2 1
1 4014 1.97676 3 1
1 2014 1.97676 4 1
1 2014 1.97676 5 1
1 401 1.97676 6 1
1 401 1.97676 7 1
1 401 1.97676 8 1
1 14 1.97676 9 1
1 14 1.97676 10 1
如何在bash中实现这一目标?我不想在python中特别是在pandas中这样做,因为它们处理大文件的速度很慢。
另一个问题是:如何在.sh文件中编写这样的bash命令(类似于python运行的.py文件)并在终端中运行文件,如下所示:
1 4014 1.97676 1 1
1 4014 1.97676 2 1
1 4014 1.97676 3 1
1 2014 1.97676 4 1
1 2014 1.97676 5 1
非常感谢。
这是我想做的事情:
文件是这样的:
$bash clean_file.sh inputfile.txt > outputfile.txt
我想使用以下步骤清理它:
NODE_1_length_4014_cov_1.97676 1 1
NODE_1_length_4014_cov_1.97676 2 1
NODE_1_length_4014_cov_1.97676 3 1
NODE_1_length_4014_cov_1.97676 4 1
NODE_1_length_4014_cov_1.97676 5 1
NODE_1_length_4014_cov_1.97676 6 1
NODE_1_length_4014_cov_1.97676 7 1
NODE_1_length_4014_cov_1.97676 8 1
NODE_1_length_4014_cov_1.97676 9 1
NODE_1_length_4014_cov_1.97676 10 1
我没有添加' inputfile'和' outputfile'在上面的脚本中,因为每个步骤都使用前一步的输出文件作为输入文件。我不知道如何将这三个步骤合并到一个脚本文件中并将其保存在硬盘中。我想在终端中运行它,以便存储在我计算机中不同位置的文件。
非常感谢!
答案 0 :(得分:1)
bash是错误的工具。
awk '$2 >= 1000 { print }'
答案 1 :(得分:1)
这种过滤对于awk
来说确实微不足道,但仅仅为了完整性(教育),这里只有bash
- 版本:
#!/bin/bash
# "parse"/validate a script's argument (filename)
if [[ ! -e "$1" ]]; then
echo "Usage: $0 FILE"
exit
fi
# iterate over lines, splitting into fields on whitespaces
while read -ra fields; do
(( fields[1] >= 1000 )) && echo "${fields[@]}"
done <"$1"
用法如下:
$ ./clean_file.sh inputfile.txt > outputfile.txt
答案 2 :(得分:0)
您的第二个示例输入文件没有任何测试条件。所以我更新了
def authenticate(actorRef: ActorRef, message: SocketParsedMessage) {
(message.data \ "token").validate[String] match {
case s: JsSuccess[String] => {
val token = jwt.parse(s.get)
if (jwt.verify(token,jwtSecret)) {
val userId = UUID.fromString(jwt.getSubject(token))
hashMapU2A += (UUID.fromString(jwt.getSubject(token)) -> actorRef)
hashMapA2U += (actorRef -> userId)
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, Json.obj(
"success" -> true, "message" -> "Authorized for making further requests request")).toString
publishUserStatus(userId)
} else {
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, JsObject(
Seq("success" -> JsBoolean(false), "message" -> JsString("Invalid token"))
)).toString
}
}
case e: JsError => {
actorRef ! SocketParsedMessage(AllowedSocketMessageTypes.AUTHENTICATE, Json.obj(
"success" -> false, "message" -> "Token not supplied with request")).toString
actorRef ! PoisonPill
}
}
}
val hashMapA2U: mutable.HashMap[ActorRef, UUID] = mutable.HashMap()
它变成了
$ sed -i '5,$s/4014/300/' file
您要删除长度小于500的条目。这个简单的NODE_1_length_4014_cov_1.97676 1 1
NODE_1_length_4014_cov_1.97676 2 1
NODE_1_length_4014_cov_1.97676 3 1
NODE_1_length_4014_cov_1.97676 4 1
NODE_1_length_300_cov_1.97676 5 1
NODE_1_length_300_cov_1.97676 6 1
NODE_1_length_300_cov_1.97676 7 1
NODE_1_length_300_cov_1.97676 8 1
NODE_1_length_300_cov_1.97676 9 1
NODE_1_length_300_cov_1.97676 10 1
脚本可以执行!
awk