小编Ger*_*oge的帖子

如何用"."替换重复的行.在awk?

我需要用"."替换我的第一列中的重复.

例如:

name1
name1
name1
name2
name2
name3
name3
Run Code Online (Sandbox Code Playgroud)

我需要输出:

name1
.
.
name2
.
name3
.
Run Code Online (Sandbox Code Playgroud)

我有这样的解决方案:

awk '{c=$1} c==p{gsub(/./,".",$1)} {p=c} 1' in.file
Run Code Online (Sandbox Code Playgroud)

但输出是:

name1
.....
.....
name2
.....
name3
.....
Run Code Online (Sandbox Code Playgroud)

有没有任何其他管道的解决方案?

bash awk duplicates

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

在awk中根据字典文件替换字符串

cat input

aaa paul peter
bbb john mike
ccc paul mike 
bbb paul john
Run Code Online (Sandbox Code Playgroud)

和我的字典文件字典:

cat dict

aaa OOO
bbb 111
ccc 222
Run Code Online (Sandbox Code Playgroud)

我需要找到字符串形式input,如果匹配文件中的第一列,则将dict第二列形式文件打印dict到第一列文件中input。我可以使用subgsub,但是dict文件中有数千行(使用不同的字母)。

cat output:

000 paul peter
111 john mike
222 paul mike 
111 paul john
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助。

我的解决方案:

  awk:

awk '{sub(/aaa/,"000",$1); sub(/bbb/,"111",$1); sub(/ccc/,"222",$1)1' input
Run Code Online (Sandbox Code Playgroud)

更新:

如果在中找不到匹配input的内容dict,请保持第一列中的单词不变。

猫输入

aaa paul peter
bbb john mike
ccc paul mike 
bbb paul john
ddd …
Run Code Online (Sandbox Code Playgroud)

unix bash awk sed

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

更快的解决方案来比较bash中的文件

文件1:

chr1    14361   14829   NR_024540_0_r_DDX11L1,WASH7P_468
chr1    14969   15038   NR_024540_1_r_WASH7P_69
chr1    15795   15947   NR_024540_2_r_WASH7P_152
chr1    16606   16765   NR_024540_3_r_WASH7P_15
chr1    16857   17055   NR_024540_4_r_WASH7P_198
Run Code Online (Sandbox Code Playgroud)

和file2:

NR_024540 11
Run Code Online (Sandbox Code Playgroud)

我需要找到比赛file2file1并打印全file1 + second column of file2

所以ouptut是:

  chr1  14361   14829   NR_024540_0_r_DDX11L1,WASH7P_468 11
chr1    14969   15038   NR_024540_1_r_WASH7P_69 11
chr1    15795   15947   NR_024540_2_r_WASH7P_152 11
chr1    16606   16765   NR_024540_3_r_WASH7P_15 11
chr1    16857   17055   NR_024540_4_r_WASH7P_198 11
Run Code Online (Sandbox Code Playgroud)

我的解决方案在bash中非常缓慢:

#!/bin/bash

while read line; do

c=$(echo $line | awk '{print $1}')
d=$(echo $line | awk '{print $2}')

grep …
Run Code Online (Sandbox Code Playgroud)

linux bash awk sed

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

使用awk计算统计量

我有一个关于我以前的成功回答问题一个问题在这里通过@fedorgui.

我有一张桌子:

pac1 xxx 
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
Run Code Online (Sandbox Code Playgroud)

我需要像这样计算输出:

pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 uuu 2/4
pac3 zzz 2/4
pac3 uuu 2/4
pac4 zzz 3/4
Run Code Online (Sandbox Code Playgroud)

第一列中的第一个数字是第二列中的唯一出现次数(在这种情况下,xxx在第二列中出现2,而uniq第一列出现在第二列中 4 => 2/4

解决方案在awk中工作在这里:

$ awk 'FNR==NR {col1[$1]++; col2[$2]++; next} {print $0, col2[$2] "/" length(col1)}' file file
Run Code Online (Sandbox Code Playgroud)

但我的输入可能有重复的行,如:

pac1 xxx
pac1 xxx 
pac1 xxx  
pac1 yyy
pac1 zzz
pac2 xxx
pac2 xxx
pac2 xxx …
Run Code Online (Sandbox Code Playgroud)

linux bash awk sed

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

通过awk将频率(出现次数)添加到我的文本表中

给定此输入表:

pac1 xxx 
pac1 yyy
pac1 zzz
pac2 xxx
pac2 uuu
pac3 zzz
pac3 uuu
pac4 zzz
Run Code Online (Sandbox Code Playgroud)

我需要将频率添加到第三列,如下所示:

pac1 xxx 2/3
pac1 yyy 1/3
pac1 zzz 3/3
pac2 xxx 2/2
pac2 uuu 2/2
pac3 zzz 2/2
pac3 uuu 2/2
pac4 zzz 3/1
Run Code Online (Sandbox Code Playgroud)

第一个数字是第二列中出现的次数.

awk '{print $2}' input | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

斜杠后的数字是第一列的单独出现:

awk '{print $1}' input | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

我想在awk中使用实现.

编辑:

请修改输出 - 第一列是名称,我需要计算在第一列中出现的uniq名称数量,如:

pac1 xxx 2/4
pac1 yyy 1/4
pac1 zzz 3/4
pac2 xxx 2/4
pac2 …
Run Code Online (Sandbox Code Playgroud)

bash awk sed

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

标签 统计

awk ×5

bash ×5

sed ×4

linux ×2

duplicates ×1

unix ×1