我需要用"."替换我的第一列中的重复.
例如:
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)
有没有任何其他管道的解决方案?
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。我可以使用sub和gsub,但是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) 文件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)
我需要找到比赛file2中file1并打印全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) 我有一个关于我以前的成功回答问题一个问题在这里通过@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) 给定此输入表:
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)