小编use*_*393的帖子

如何使用awk将两个模式之间的未知数量的多行合并为一行

我有一些文本文件,其中每个文件将有如下信息

235.91 245.67 B: some information here
246.79 246.99 A: some other information here,
more information here,
and may be here
247.45 248.99 A: some other text here,
some more here
249.98 ---- 
Run Code Online (Sandbox Code Playgroud)

并且模式重复

我希望文本安排如下:

235.91 245.67 B: some information here
246.79 246.99 A: some other information here, more information here, and may be here
247.45 248.99 A: some other text here. some more here
249.98 -----
Run Code Online (Sandbox Code Playgroud)

这意味着我想合并两个匹配模式之间的所有行(它们之间有空格)

我希望每一行都以数字作为模式开始.数字始终有一个小数点,小数点后有两位数.图案与下一个图案之间的线数不同(可以有一条或多条线或根本没有线).

有人可以使用shell脚本帮助我这样做,最好使用awk吗?

shell awk grep

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

如何使用grep但没有for循环在shell脚本中执行以下任务?

我有一个文件,比如A.txt,它有大约80,000行,但有2个字段.示例行如下所示:

utt1 f 
utt2 f 
utt3 m 
utt4 f
Run Code Online (Sandbox Code Playgroud)

我有第二个文件B.txt,它比A.txt有更多的行,并有两个字段.示例行如下所示

utt1_1 somethingHere    
utt1_2 somethingElse    
utt2_1 someText    
utt2_2 somemore    
utt2_3 someMore    
utt3_1 someText    
utt4_1 somemore    
utt4_2 abcd    
utt4_3 aanan
Run Code Online (Sandbox Code Playgroud)

B.txt中的第一个字段与A.txt中的第一个字段基本相同,后跟_something(每行重复可变次数).

我的任务是创建一个看起来像这样的文件

utt1_1 f    
utt1_2 f    
utt2_1 f    
utt2_2 f    
utt2_3 f    
utt3_1 m    
utt4_1 f    
utt4_2 f    
utt4_3 f
Run Code Online (Sandbox Code Playgroud)

'f'和'm'开始于性别.换句话说,我想做的是从A.txt和grep中获取utt和性别信息,以获取B.txt中的话语,并将第一个字段映射到正确的性别.我正在使用while循环,如下所示:

while read utt gen; do
   grep $utt B.txt | awk -v gen=$gen '{print $1" "gen}'
done < A.txt
Run Code Online (Sandbox Code Playgroud)

因为,我在一个循环中完成它,并且A.txt的长度很大,因此需要花费大量时间来完成任务.你能建议我使用bash更快的方式吗?

谢谢

python bash shell awk grep

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

标签 统计

awk ×2

grep ×2

shell ×2

bash ×1

python ×1