Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >迭代Bash脚本Bug

迭代Bash脚本Bug
EN

Stack Overflow用户
提问于 2018-03-15 22:58:17
回答 3查看 203关注 0票数 0

使用bash脚本,我试图遍历一个只有大约700个单词的文本文件,逐行遍历,并在当前目录中使用特定文件上的不区分大小写的grep搜索。为了分解它,我尝试将以下内容输出到一个文件中:

  1. 将换行符追加到文件中,然后是搜索的单词,然后是另一行
  2. 使用该搜索追加grep命令的结果。
  3. 重复步骤1和步骤2,直到列表中的所有单词都用完为止。

例如,如果我有这个list.txt:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search1
search2

我希望results.txt是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search1:
grep result here

search2:
grep result here

在整个堆栈交换过程中,我找到了一些关于如何做到这一点的答案,并提出了以下实现:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/usr/bin/bash

while IFS = read -r line;
do 
    "\n$line:\n" >> "results.txt";
    grep -i "$line" *.in >> "results.txt";
done < "list.txt"

然而,由于某些原因(以及我尝试过的众多变体)无法工作。似乎微不足道,但我会一直令我难以置信。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-03-16 04:07:38

如果将脚本更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while IFS= read -r line; do
    printf '\n%s:\n' "$line"
    grep -i "$line" *.in
done < list.txt > results.txt

但它会非常慢。请参阅https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice,了解为什么在编写shell循环之前,您应该考虑很长时间,然后才能操作文本。操纵文本的标准UNIX工具是awk:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '
NR==FNR { words2matches[$0]; next }
{
    for (word in words2matches) {
        if ( index(tolower($0),tolower(word)) ) {
            words2matches[word] = words2matches[word] $0 ORS
        }
    }
}
END {
    for (word in words2matches) {
        print word ":" ORS words2matches[word]
    }
}
' list.txt *.in > results.txt

当然,上面的内容没有经过测试,因为您没有提供我们可以进行测试的示例输入/输出。

票数 1
EN

Stack Overflow用户

发布于 2018-03-15 23:20:43

可能出现的问题:

  1. bash路径-使用/bin/bash路径而不是/usr/bin/bash
  2. 空格-删除' '后的IFS
  3. 使用-e选项处理转义字符(此处:'\n')
  4. 分号-行尾不需要分号

请尝试使用以下脚本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

while IFS= read -r line; do
    echo -e "$line:\n" >> "results.txt"
    grep -i "$line" *.in >> "results.txt"
done < "list.txt"
票数 0
EN

Stack Overflow用户

发布于 2018-03-16 00:52:55

甚至不需要为此目的编写bash脚本:

输入文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ more file?.in
::::::::::::::
file1.in
::::::::::::::
abc
search1
def
search3
::::::::::::::
file2.in
::::::::::::::
search2
search1
abc
def
::::::::::::::
file3.in
::::::::::::::
abc
search1
search2
def
search3

模式文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ more patterns 
search1
search2
search3

CMD:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ grep -inf patterns file*.in | sort -t':' -k3 | awk -F':' 'BEGIN{OFS=FS}{if($3==buffer){print $1,$2}else{print $3; print $1,$2}buffer=$3}'

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
search1
file1.in:2
file2.in:2
file3.in:2
search2
file2.in:1
file3.in:3
search3
file1.in:4
file3.in:5

EXPLANATIONS:

  • grep -inf patterns file*.in将grep所有file*.in与所有模式位于模式文件中感谢-f选项,使用-i强制不敏感大小写,-n将添加行号
  • sort -t':' -k3使用第三列对输出进行排序,以便将模式重新组合在一起
  • awk -F':' 'BEGIN{OFS=FS}{if($3==buffer){print $1,$2}else{print $3; print $1,$2}buffer=$3}'然后awk将打印您想要的显示,方法是使用:作为字段分隔器和输出字段分隔器,使用缓冲区变量保存模式(第三个字段),并在模式更改时打印模式($3!=buffer)。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49314856

复制
相关文章
你知道一个空的类里面有什么吗?
上面定义了一个真的很空的空类,一对大括号里面除了空气之外,真的什么都没有!根据C++的语法,这样的类是可以通过编译的,并且可以跟别的小朋友一样到处玩耍、奔跑和嬉闹。look:
用户2617681
2019/08/08
8980
你知道一个空的类里面有什么吗?
jquery ajax聊天室
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <style type="text/css"> body{ margin:0; padding:0; font-size:12px; } #messagewindow { height: 250px; border: 1px solid; padding: 5px; overflow: auto; } #wrapper { margin: auto; width: 438px; } </style> <script src="../scripts/jquery.js" type="text/javascript"></script> <script type="text/javascript"> //<![CDATA[
用户5760343
2019/10/10
1.5K0
jquery ajax聊天室
一个基因上面有多个探针最后只能选一个吗
最近学员提出来了一个蛮古老的表达量芯片数据集的讨论,因为 它是做了这个PPARα的基因敲除,但是学员在分析表达量矩阵做差异的时候发现PPARα本身其实并没有统计学显著的差异表达。 数据集是:https
生信技能树
2022/07/26
7700
一个基因上面有多个探针最后只能选一个吗
前端使用ajax_ajax属于前端吗
大家好,又见面了,我是你们的朋友全栈君。 原生AJAX 名称: 异步的javascript and xml 原理: 通过XMLHttpRequest与服务器交换数据 服务器数据通过json或者xml格式返回 浏览器通过js+css渲染展示数据 GET 创建xhr open打开连接 监听readystate readyState 4准备状态完毕 status 状态码200 响应成功 send 发送 <button id="btn">点击</button> <p id="content"></p> <scrip
全栈程序员站长
2022/11/11
1.8K0
jquery和ajax实战教程_ajax可以跨域吗
主要的效果是使用ajax来实现书籍的价格随着书籍的数量变化,有一个增加按钮和一个减少按钮
全栈程序员站长
2022/09/22
7010
jquery和ajax实战教程_ajax可以跨域吗
ajax 一个完整的ajax请求
var request; if(window.XMLHttpRequest){ request=new XMLHttpRequest(); //IE7+,… }else{ request=new ActiveXObject(“Microsoft.XMLHTTP”); //IE6,IE5
全栈程序员站长
2022/11/19
6280
FOC入门教程_晚上开飞机前面有灯吗
1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛,如无人机、机械臂、云台、仿生机器人等等。 3.电机控制工程师薪水较高。
全栈程序员站长
2022/11/01
9740
FOC入门教程_晚上开飞机前面有灯吗
Ajax篇(001)-Ajax 是什么? 如何创建一个 Ajax?
答案:Ajax 全称是 asychronous javascript and xml,可以说是已有技术的组合,主要用来实现客户端与服务器端的异步交互,实现页面的局部刷新。 基本步骤 4 步走:(创建对象、建立连接、发送数据、接收数据) 解析: 1:我要创建一个XMLHttpRequest 对象。
齐丶先丶森
2022/05/12
4190
你真的知道ajax的全部吗?
ajax是只客户端需要数据,发送异步请求到后端去获取。这个获取过程是异步过程,不会阻塞前面页面的进程。 正因为如此,后端什么时候回返回数据,我们前段不会知道一个确切的时间,因为现实情况很复杂,根据用户所处的环境,网速,设备本身,都有可能影响请求接受数据的速度。 但是呢,当数据接受完毕的时候,我们前端需要做一些处理,但是又不知道什么请求回来数据,这个时候就麻烦了。不是说无法处理,而是写代码很难看了。 这个时候,我们需要知道jquery的defer对象。 一、什么是deferred对象? 开发网站的过程
前朝楚水
2018/04/02
9880
SEO功夫在站外是真的吗?
在早期我们做SEO的时候,经常会听到这样一句话:SEO功夫在站外,实际上,这是一个非常有争议的话题,我们都非常清楚,SEO是一个综合性的运营指标。
蝙蝠侠IT
2020/12/10
6150
SEO功夫在站外是真的吗?
页面有点卡,你知道原因和解决方案吗?
点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 09:00准时推送,每月不定期赠送技术书籍。
可可的测试小栈
2022/11/11
9310
页面有点卡,你知道原因和解决方案吗?
Shell脚本,你会吗?
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
kubernetes中文社区
2019/07/23
7540
网页实时聊天之js和jQuery实现ajax长轮询
摘要总结:本文通过分析PHP和JavaScript两种不同的语言实现聊天室,阐述了使用JavaScript实现聊天室的优势和可行性。同时,本文还通过具体的代码示例,讲解了使用jQuery插件实现聊天室的具体方法,对于从事前端开发的人员具有一定的参考价值。
枕边书
2018/01/04
4.3K0
网页实时聊天之js和jQuery实现ajax长轮询
c语言qq聊天刷屏代码大全,QQ聊天刷屏脚本 达人分享技巧
Set WshShell= WScript.CreateObject(“WScript.Shell”)
全栈程序员站长
2022/07/25
5.4K0
c语言qq聊天刷屏代码大全,QQ聊天刷屏脚本 达人分享技巧
简易聊天室的实现 - Ajax轮询与长轮询
  轮询即rolling,通过Ajax循环访问服务端直到获取信息返回并关闭连接。 通俗点讲就是连续访问服务器,获取服务端数据并在前端输出。
xcsoft
2021/07/14
1.4K0
不做外链 网站SEO优化还有戏吗
如果你在2019年仍然还在坚持做SEO,那么耳熟能详的“外链建设”仍然是我们SEO优化工作的重点。有些朋友会问,没有外链还能否做SEO呢?如果能做,那么为什么要花大量时间和人力去建设外链呢?
安邦运维ruangseo
2019/08/06
8750
客服系统vue源码聊天界面,ajax上传图片功能实现
在线客服系统的聊天界面上,有上传图片按钮功能,使用js实现ajax上传图片功能 html部分,有一个点击事件 <div class="iconExtendBtn" @click="uploadImg"> <div class="elIcon el-icon-picture"></div> <div>图片</div> </div> js
唯一Chat
2023/04/26
6610
使用Promise封装一个 Ajax
首先, XMLHttpRequest (XHR)对象可以与服务器交互。你可以从URL获取数据,而无需让整个的页面刷新。这允许网页在不影响用户的操作的情况下更新页面的局部内容。在 Ajax 编程中 XMLHttpRequest 被大量使用。
钟俊耀
2019/08/26
1.9K0
使用Promise封装一个 Ajax
一个ajax的Post要求
$.post(url,[data],[callback],[type]) 第一个参数是地址,第二个参数是一个参数传递。第三个参数是一个回调函数。參数是请求返回数据的类型
全栈程序员站长
2022/07/06
1.4K0
微信聊天内容可以被监听吗
“在那个群,和谁聊了什么,看的一清二楚,还可以搜索”,并且使用的是自己的设备,着实让我觉得不可思议。先不论技术,逻辑上说,如果仅因为使用了公司的wifi就可以被监控微信聊天内容,推论就是:
码农编程进阶笔记
2022/05/24
4K0
微信聊天内容可以被监听吗

相似问题

连接kinesis producer AWS kinesis 443时出错

16

使用Kinesis启动Spring Cloud Stream时出错

113

将Raspberry Pi W连接到Kinesis视频流时出错

10

Spark Streaming -从Kinesis读取时出错

11

AWS SDK 1.11.844在连接到Kinesis时不断抛出错误

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文