有没有办法在整行中找到特定的记录?
这是我的文件:
one two three four
two three four five
three four five six
four five six seven
five six seven eight
Run Code Online (Sandbox Code Playgroud)
如何搜索包含两行的所有行?
我在文本文件中有以下数据集
数据.txt
d1,40,gold
d2,30,silver
d3,20,bronze
d4,10,iron
d5,5,wood
d6,20,gold
d7,10,wood
d8,5,gold
d9,10,silver
.
.
.
Run Code Online (Sandbox Code Playgroud)
定义文件
gold,40
silver,30
bronze,20
iron,10
wood,5
Run Code Online (Sandbox Code Playgroud)
我需要的是将数据与我的定义文件进行比较,并在主文件中添加状态为“ok”或“nok”。由于数据文件很大,我可以用while循环找出来,但需要很长时间。有没有优化的方法?
数据.txt
d1,40,gold,ok
d2,30,silver,ok
d3,20,bronze,ok
d4,10,iron,ok
d5,5,wood,ok
d6,20,gold,nok
d7,10,wood,nok
d8,5,gold,nok
d9,10,silver,nok
Run Code Online (Sandbox Code Playgroud) 我想转换
blue blue red green
Run Code Online (Sandbox Code Playgroud)
到:
color.1=blue color.2=blue color.3=red color.4=green
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何线索?sed、awk 等?
我有以下 emails.txt:
tsar@gmail.com
c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com
cm_@hotmail.com
@pepito.com
Run Code Online (Sandbox Code Playgroud)
和一个 sed 命令来获取
sed -n -r '/\w+@\w+\.\w+((\.\w+)*)?/p' emails.txt
tsar@gmail.com
cm_@hotmail.com
Run Code Online (Sandbox Code Playgroud)
但是,它一直显示包含多个 .com 的电子邮件
我不想要这些电子邮件:
c2m_@hotmail.com.es
c72@hotmail.com.es.com;es
m7_@hotmail.es.com
@pepito.com
Run Code Online (Sandbox Code Playgroud)
我被困在这里,我不知道如何获得它。
我正在尝试使用 grep 在文件中查找所有匹配的字符串,并将它们在行的上下文中输出到另一个文件,同时在匹配的每一侧添加某种标记(最好是两个星号)。
例如,我有input.txt以下比赛的文件:
Dog walks in the park
Man runs in the park
Man walks in the park
Dog runs in the park
Dog is still
They run in the park
Woman runs in the park
Run Code Online (Sandbox Code Playgroud)
然后,我通过重定向到文件进行 grep 搜索:
grep -P ' runs? ' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
它创建output.txt具有以下竞赛的文件:
Man runs in the park
Dog runs in the park
They run in the park
Woman runs in the park
Run Code Online (Sandbox Code Playgroud)
我想做的是获得该输出:
Man **runs** in the park
Dog …Run Code Online (Sandbox Code Playgroud) 我想从 csv 文件中删除几行。
规则很简单(保持行如果):
来源
Test1, 0.0, 1
Test1, 0.2, 1
Test1, 10.0, 3
Test2, 0.1, 1
Test2, 0.3, 3
Test2, 1.0, 5
Test2, 11.0, 7
Run Code Online (Sandbox Code Playgroud)
结果
Test1, 0.0, 1
Test1, 10.0, 3
Test2, 0.1, 1
Test2, 11.0, 7
Run Code Online (Sandbox Code Playgroud)
我想用 awk 和一些 if 语句来做这个,但我不确定我是否可以创建一个在记录处理之间传输的变量。
编辑:这隐藏在评论部分(来自我):
我刚刚发现变量可以在记录之间使用。与 C 不太一样的东西。除非有人给出我认为对其他人有用的答案或有人要求我提供答案,否则我将删除此问题。
对于源英文文件在 docbook xml 中的官方 Ubuntu 文档,要求仅使用 ASCII 字符。我们使用“检查器”命令行(请参阅此处)。
grep --color='auto' -P -n "[\x80-\xFF]" *.xml
Run Code Online (Sandbox Code Playgroud)
但是,该命令有一个缺陷,显然不是在所有计算机上,它都会遗漏一些带有非 ASCII 字符的行,可能会导致错误的 OK 结果。
有没有人对 ASCII 检查器命令行有更好的建议?
有兴趣的人可以考虑使用这个文件(文本文件,而不是 docbook xml 文件)作为测试用例。带有非 ASCII 字符的前三行是第 9、14 和 18 行。检查中遗漏了第 14 和 18 行:
$ grep --color='auto' -P -n "[\x80-\xFF]" install.en.txt | head -13
9:Appendix F, GNU General Public License.
330:when things go wrong. The Installation Howto can be found in Appendix A,
337:Chapter 1. Welcome to Ubuntu
359:1.1. What is Ubuntu?
394:1.1.1. Sponsorship …Run Code Online (Sandbox Code Playgroud) 我有一个制表符分隔的文件,其中有一个数字和属于同一行上相同数字的名称。编号和名称由制表符分隔。这些名称通过 2 个下划线 ( __)相互连接。它看起来像这样:
33 Hhe.1__Hhe.2__Hhe.3__Hhe.4
Run Code Online (Sandbox Code Playgroud)
我想将它(通过使用命令行)转换为这个输出:
33 Hhe.1
33 Hhe.2
33 Hhe.3
33 Hhe.4
Run Code Online (Sandbox Code Playgroud) 我有这个 .scp 文件,其中包含转换一堆文件所需的完整命令。
这个文件是由不同的脚本生成的,用于不同的目的,但现在我需要它转换一堆文件。
问题是每个文件都以被转换文件的文件名开头,当我想执行它时这不起作用..
如何删除文件的第一个,以便我可以转换所有文件,就像执行脚本一样简单?
下面是如何格式化文件中的文本的示例。
fcaw-b-an406 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
fcaw-b-an407 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
fcaw-b-an408 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
fcaw-b-an409 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
fcaw-b-an410 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
fcaw-b-cen1 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
Run Code Online (Sandbox Code Playgroud)
期望输出
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f …Run Code Online (Sandbox Code Playgroud) 这是我的 CSV 文件的示例:
04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254
04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0
04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0
04/Feb/2016:06:39:07-0500,ab,1,43,170,304,0
04/Feb/2016:06:39:07-0500,cd,1,44,171,304,0
04/Feb/2016:06:39:07-0500,ef,1,45,172,304,0
Run Code Online (Sandbox Code Playgroud)
我想在第二列中获取字符串,如果文件不存在则创建类似该字符串的文件,并在文件中添加该特定行。所以像这样:
fetch string in 2nd column -> "ab" -> if file doesnt exist create file called "ab.csv" -> open file and add line "04/Feb/2016:06:38:44-0500,ab,3,10,57,200,10254"
fetch string in 2nd column -> "cd" -> if file doesnt exist create file called "cd.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,cd,1,42,168,304,0"
fetch string in 2nd column -> "ef" -> if file doesnt exist create file called "ef.csv" -> open file and add line "04/Feb/2016:06:39:07-0500,ef,1,43,169,304,0"
fetch …Run Code Online (Sandbox Code Playgroud) text-processing ×10
bash ×5
command-line ×5
awk ×4
sed ×2
grep ×1
output ×1
python ×1
regex ×1
scripts ×1