小编mah*_*ood的帖子

如何使用Linux命令排序根据第4列,数字顺序对文本文件进行排序?

我有一个像这样的文件(空格分隔):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
Run Code Online (Sandbox Code Playgroud)

我想使用sort命令根据第4列对文件进行排序.我在互联网上到处查看它,我找到了不同的解决方案,尼姑工作!我甚至在stackoverflow中找到类似的问题,答案对我不起作用!所以这些是我正在使用的命令并且不起作用!

sort -n -k 4,1 out1.txt
sort -n -k 4 out1.txt
sort -n -k4 out1.txt
sort -nk4 out1.txt
sort +4 out1.txt
Run Code Online (Sandbox Code Playgroud)

所以在运行所有这些命令后,我得到了这个输出(与我的输入相同):

AX-18 Chr1_419085 1 41908545 T C -1 98 0.51
AX-19 Chr1_419087 1 41908740 T C 0 15 0.067
AX-20 Chr1_419087 1 41908741 T C 0 13 0.067
Run Code Online (Sandbox Code Playgroud)

我想获得这样的输出: …

linux sorting

27
推荐指数
2
解决办法
7万
查看次数

使用AWK查找列中最小和最大的数字?

如果我有一个列很少的文件,我想使用AWK命令来显示特定列中的最大和最小数字!

例:

a  212
b  323
c  23
d  45
e  54
f  102
Run Code Online (Sandbox Code Playgroud)

我希望我的命令显示最低数字是23,另一个命令说最高数字是323

我不知道为什么答案不起作用!我把一个更现实的文件示例(也许我应该提到的是标签确定)

##FORMAT=<ID=DP,Number=1,Type=Integer,Description="# high-quality bases">
##FORMAT=<ID=SP,Number=1,Type=Integer,Description="Phred-scaled strand bias P-value">
##FORMAT=<ID=PL,Number=-1,Type=Integer,Description="List of Phred-scaled genotype likelihoods, number of values is (#ALT+1)*(#ALT+2)/2">
#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  rmdup_wl_25248.bam
Chr10   247     .       T       C       7.8     .       DP=37;AF1=0.5;CI95=0.5,0.5;DP4=7,1,19,0;MQ=15;FQ=6.38;PV4=0.3,1,0.038,1 GT:PL:GQ        0/1:37,0,34:36
Chr10   447     .       A       C       75      .       DP=30;AF1=1;CI95=1,1;DP4=0,0,22,5;MQ=14;FQ=-108 GT:PL:GQ        1/1:108,81,0:99
Chr10   449     .       G       C       35.2    .       DP=33;AF1=1;CI95=0.5,1;DP4=3,2,20,3;MQ=14;FQ=-44;PV4=0.21,1.7e-06,1,0.34        GT:PL:GQ        1/1:68,17,0:31
Chr10   517     .       G       A       222     . …
Run Code Online (Sandbox Code Playgroud)

linux awk

11
推荐指数
2
解决办法
4万
查看次数

如何将列数据传输到行(使用awk)?

我有这样一个文件:

n A B C D 
1 01 02 01 01
2 02 02 01 01
Run Code Online (Sandbox Code Playgroud)

我想按行传输列,所以输出应该是这样的:

n 1 2
A 01 02
B 02 02
C 01 01 
D 01 01
Run Code Online (Sandbox Code Playgroud)

我写了这个命令:

awk '{ for (i=1;i<=NF;i++ ) printf $i " " }' file.txt > out-file.txt
Run Code Online (Sandbox Code Playgroud)

问题是这个命令把所有东西放在一行!所以输出是这样的:

n 1 2 A 01 02 B 02 02 C 01 01 D 01 01
Run Code Online (Sandbox Code Playgroud)

linux awk rows

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

如何用AWK选择一些列?

我想在文件中选择一些列并在其上运行一些命令.所以我的剧本就是这个

awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$19}' test.txt > outpot.txt
Run Code Online (Sandbox Code Playgroud)

但这打印到另一个文件,我试图这样做

awk '{print $1,$2,$3,$4,$5,$6,$7,$9,$10,$11,$12,$13,$14,$15,$16}' test.txt | next commands
Run Code Online (Sandbox Code Playgroud)

(这个命令工作正常!我犯了一个错误,我不知道如何删除这个问题)

是否有可能使这个命令更短,而不是写所有列只是写$1-7 && $9-15 && $19(但这不是很重要,我只是想知道它是否可能).最主要的是能够选择那些列

linux awk

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

如何用awk合并两个文件?

我有两个文件,它们的顺序相同,行数相同:

file1(只有2列):

562_201 RIR1
562_202 RIR1
562_203 RIR1
562_204 RIR1
562_205 RIR1
562_206 RIR1
562_207 RIR1
562_208 RIR1
562_209 RIR1
562_210 WR1 
562_211 WR1 
562_212 WR1 
Run Code Online (Sandbox Code Playgroud)

file2(我应该说file2有超过百万行!):

562_201 0101
562_202 0101
562_203 0101
562_204 0101
562_205 0101
562_206 0101
562_207 0101
562_208 0101
562_209 0101
562_210 0101
562_211 0101
562_212 0101
Run Code Online (Sandbox Code Playgroud)

我想合并他们得到:

562_201 RIR1 0101
562_202 RIR1 0101
562_203 RIR1 0101
562_204 RIR1 0101
562_205 RIR1 0101
562_206 RIR1 0101
562_207 RIR1 0101
562_208 RIR1 0101
562_209 RIR1 0101
562_210 …
Run Code Online (Sandbox Code Playgroud)

awk

4
推荐指数
3
解决办法
7974
查看次数

如何将数据框中的每个列拆分为两列?

我有一个这样的数据框(4行和5列):

Marker ind1 ind2 ind3 ind4
mark1             CT             TT             CT             TT
mark2             AG             AA             AG             AA
mark3             AC             AA             AC             AA
mark4             CT             TT             CT             TT
Run Code Online (Sandbox Code Playgroud)

我想要做的是将每个列(第一个coloumn除外)拆分为两列.所以输出应该像这样(4行9列):

Marker ind1 ind1 ind2 ind2 ind3 ind3 ind4 ind4
mark1             C T             T T             C T             T T
mark2             A G             A A             A G             A A
mark3             A C             A A             A C             A A
mark4             C T             T T             C T             T T
Run Code Online (Sandbox Code Playgroud)

我知道如何拆分一列

do.call(rbind,strsplit(test$JRP4RA6119.039, ""))
Run Code Online (Sandbox Code Playgroud)

这给了这个:

      [,1] [,2]
 [1,] "C" …
Run Code Online (Sandbox Code Playgroud)

loops r strsplit rbind

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

如何组合两个 AWK 命令?

我有两个命令行与 AWK 完美运行:

awk 'NR >=2 {for (i=7;i<=NF;i++) if ($i ~ /^-/) sum1 += $i; print $1,$2,$3,$4,$5,$6,sum1, ; sum1 = 0}' test.txt

awk 'NR >=2 {for (i=7;i<=NF;i++) if ($i ~! /^-/) sum += $i; print $1,$2,$3,$4,$5,$6,sum, sum/192 ; sum = 0}' test.txt
Run Code Online (Sandbox Code Playgroud)

我想将这两个命令组合成一个命令,这样我就可以得到 sum 和 sum1 并且我想同时打印它们!如果可能的话,使用一个方程!

像这样:

awk 'NR >=2 {for (i=7;i<=NF;i++) if ($i ~! /^-/) sum += $i; {for (i=7;i<=NF;i++) if ($i ~ /^-/) sum1 += $i ; print $1,$2,$3,$4,$5,$6,sum,sum1, sum/(192 +(sum1*2)) ; sum = 0 ; sum1 …
Run Code Online (Sandbox Code Playgroud)

linux awk

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

如何在保持原始顺序的情况下在Linux中复制行?

我有一个文件(只有1列)像这样:

A
B
Z
D
N
Run Code Online (Sandbox Code Playgroud)

而我想要做的是复制每一行,所以我得到这个:

A
A
B
B
Z
Z
D
D
N
N
Run Code Online (Sandbox Code Playgroud)

我只能想到将cat用于同一个文件然后对其进行排序:

cat file1 file1 | sort -k1 > file1_duplicate
Run Code Online (Sandbox Code Playgroud)

但后来我丢失了对我来说很重要的文件顺序:

A
A
B
B
D
D
N
N
Z
Z
Run Code Online (Sandbox Code Playgroud)

任何建议都会有所帮助.

linux

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

如何加入两个不相似的文件?

我想一起添加两个文件,其中一个只有一列,另一个10,我想在另一个文件的乞讨中添加一个列!他们没有任何类似的专栏!

我试过join命令,但需要一个类似的列(据我所知),然后我尝试了cat命令,它可以工作,但它不会保存为第一列!

所以文件格式是这样的:

文件1:

probeset_id
AX-76431849
AX-76431844
AX-76431845
Run Code Online (Sandbox Code Playgroud)

文件2:

submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_258
"0" "1" "0" "0" "2" "1" "1" "0" "1" "1"
"0" "1" "0" "0" "2" "1" "1" "0" "1" "1"
"0" "1" "0" "0" "2" "1" "1" "0" "1" "1"
Run Code Online (Sandbox Code Playgroud)

而我正在尝试输出:

probeset_id submitted_id chr snp_pos alleleA alleleB 562_201 562_202 562_203 562_204 562_205 562_206 562_207 562_208 562_209 562_258
AX-76431849 "0" "1" "0" "0" …
Run Code Online (Sandbox Code Playgroud)

linux awk cat

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

如何在python中创建一个if循环来说"如果某个列(在这种情况下为1/1)存在于我的一个列中(在我的情况下为10)?

我有这样一个文件:

Chr10   31      .       T       C       35.1    .       DP=7;AF1=1;CI95=1,1;DP4=0,0,7,0;MQ=23;FQ=-48    GT:PL:GQ        1/1:68,21,0:39**
Chr10   445     .       G       T       34      .       DP=23;AF1=0.5;CI95=0.5,0.5;DP4=7,5,6,3;MQ=19;FQ=12.3;PV4=1,6.2e-08,1,0.27       GT:PL:GQ        0/1:64,0,39:42
Chr10   447     .       A       C       93      .       DP=26;AF1=1;CI95=1,1;DP4=0,0,13,8;MQ=19;FQ=-90  GT:PL:GQ        1/1:126,63,0:99
Chr10   449     .       G       C       5.46    .       DP=28;AF1=0.4999;CI95=0.5,0.5;DP4=9,4,6,4;MQ=23;FQ=7.8;PV4=0.69,4.3e-08,0.037,1 GT:PL:GQ        0/1:34,0,130:34
Chr10   481     .       C       T       67      .       DP=55;AF1=0.5;CI95=0.5,0.5;DP4=17,22,10,5;MQ=25;FQ=70;PV4=0.22,1.5e-07,1,1      GT:PL:GQ        0/1:97,0,152:99
Run Code Online (Sandbox Code Playgroud)

我想创建一个循环,找到1/1第10列中的所有行.

这是我写的脚本:

pilup= open ("libary_ts.sorted.pilup", "rb+")
with open ("select.txt", "wb+") as ch:
  for data in ch:
    e=data.split()
    if e[9] == "1/1":
Run Code Online (Sandbox Code Playgroud)

但是我知道这是错误的,因为if e[9] ==如果第10列具有精确的1/1,并且正如您在示例数据中看到的那样,我总是有这样的事情:

1/1:213,60,0:99 …
Run Code Online (Sandbox Code Playgroud)

python if-statement

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

是否可以将命令的输出添加到linux中的文本文件(而不是覆盖文本文件)?

我有一个这样的命令行:

awk  '$9 < 0.1' s_all_frq.txt | wc -l  
awk  '$9 >= 0.1 && $9 < 0.2 ' s_all_frq.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到这样的输出.

$ awk  '$9 < 0.1' s_all_frq.txt | wc -l  
63278
$awk  '$9 >= 0.1 && $9 < 0.2 ' s_all_frq.txt | wc -l  
2346
Run Code Online (Sandbox Code Playgroud)

当我尝试将其保存在文本文件中时,它总是替换第一个输出.所以我使用这些命令:

awk  '$9 < 0.1' s_all_frq.txt | wc -l > 1.txt 

awk  '$9 >= 0.1 &&$9 < 0.2 ' s_all_frq.txt | wc -l > 1.txt
Run Code Online (Sandbox Code Playgroud)

我只2346保存在文本文件中.我认为文件被覆盖了.我想知道是否可以在此命令中添加一些内容以将输出保存为文件中的新行,因此我将在最终文件中添加此内容:

63278
2346
Run Code Online (Sandbox Code Playgroud)

linux awk

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

标签 统计

linux ×8

awk ×7

cat ×1

if-statement ×1

loops ×1

python ×1

r ×1

rbind ×1

rows ×1

sorting ×1

strsplit ×1