标签: text-processing

使用 AWK 查找单词

有没有办法在整行中找到特定的记录?

这是我的文件:

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)

如何搜索包含两行的所有行?

awk text-processing

3
推荐指数
1
解决办法
4819
查看次数

bash比较两个不同长度的文件中的多列

我在文本文件中有以下数据集

数据.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)

bash awk text-processing

3
推荐指数
1
解决办法
2万
查看次数

如何标记文本的出现?

我想转换

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 等?

bash sed awk text-processing

3
推荐指数
1
解决办法
251
查看次数

如何使用 sed 剪切电子邮件地址?

我有以下 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)

我被困在这里,我不知道如何获得它。

sed text-processing

3
推荐指数
2
解决办法
5834
查看次数

如何在将输出重定向到文件时标记匹配的 GREP 字符串

我正在尝试使用 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)

scripts regex grep output text-processing

3
推荐指数
1
解决办法
1111
查看次数

删除特定行

我想从 csv 文件中删除几行。

规则很简单(保持行如果):

  • 这是文件的第一行。
  • 第一个值与前一行的第一个值不同。
  • 第二个值比前一个保留的行增加了至少 10。

来源

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 不太一样的东西。除非有人给出我认为对其他人有用的答案或有人要求我提供答案,否则我将删除此问题。

command-line bash text-processing

3
推荐指数
1
解决办法
931
查看次数

ASCII 源文件检查器

对于源英文文件在 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)

command-line documentation text-processing

3
推荐指数
2
解决办法
4583
查看次数

如何在制表符分隔的文件中将行转置为列?

我有一个制表符分隔的文件,其中有一个数字和属于同一行上相同数字的名称。编号和名称由制表符分隔。这些名称通过 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)

command-line text-processing

3
推荐指数
1
解决办法
2704
查看次数

如何删除此文件中不需要的部分?

我有这个 .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)

command-line bash text-processing

3
推荐指数
1
解决办法
164
查看次数

如何在 CSV 中获取字符串,通过字符串名称创建一个新的 CSV 并将该特定行添加到其中?

这是我的 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)

python command-line bash awk text-processing

3
推荐指数
1
解决办法
308
查看次数

标签 统计

text-processing ×10

bash ×5

command-line ×5

awk ×4

sed ×2

documentation ×1

grep ×1

output ×1

python ×1

regex ×1

scripts ×1