小编use*_*373的帖子

为什么使用命令替换时换行符会丢失?

我有一个名为 links.txt 的文本文件,它看起来像这样

link1
link2
link3
Run Code Online (Sandbox Code Playgroud)

我想逐行遍历这个文件并对每一行执行一个操作。我知道我可以使用 while 循环来做到这一点,但由于我正在学习,我想使用 for 循环。我实际上使用了这样的命令替换

a=$(cat links.txt)
Run Code Online (Sandbox Code Playgroud)

然后像这样使用循环

for i in $a; do ###something###;done
Run Code Online (Sandbox Code Playgroud)

我也可以做这样的事情

for i in $(cat links.txt); do ###something###; done
Run Code Online (Sandbox Code Playgroud)

现在我的问题是当我在变量 a 中替换 cat 命令输出时,link1 link2 和 link3 之间的换行符被删除并被空格替换

echo $a
Run Code Online (Sandbox Code Playgroud)

产出

链接1 链接2 链接3

然后我使用了 for 循环。当我们执行命令替换时,是否总是用空格替换新行?

问候

shell command-substitution newlines

48
推荐指数
3
解决办法
10万
查看次数

使用 wget 下载文件

我正在尝试从该网站下载文件

网址为:http : //www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file

当我使用此命令时:

wget http://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file 
Run Code Online (Sandbox Code Playgroud)

我只得到 index.html?acc=GSE48191这是某种二进制格式。

如何从该 HTTP 站点下载文件?

wget

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

将每一行的一部分输出到一个单独的文件

我有一个这样的文件:

a   AGTACTTCCAGGAACGGTGCACTCTCC
b   ATGGATTTTTGGAGCAGGGAGATGGAATAGGAGCATGCTCCAT
c   ATATTAAATGGATTTTTGGAGCAGGGAGATGGAATAGGAGCATGCTCCATCCACTCCACAC
d   ATCAGTTTAATATCTGATACGTCCTCTATCCGAGGACAATATATTAAATGGA
e   TTTGGCTAAGATCAAGTGTAGTATCTGTTCTTATAAGTTTAATATCTGATATGTCCTCTATCTGA
Run Code Online (Sandbox Code Playgroud)

我想制作a.seq包含序列的文件AGTACTTCCAGGAACGGTGCACTCTCC。同样b.seq包含ATGGATTTTTGGAGCAGGGAGATGGAATAGGAGCATGCTCCAT. 简而言之,Column1 应该用作带有扩展名的输出文件名,.seq然后它应该有相应的 column2 序列。我可以通过编写 perl 脚本来做到这一点,但命令行上的任何内容都会有所帮助。希望尽快听到。

sed awk text-processing

14
推荐指数
3
解决办法
7576
查看次数

使用tab作为分隔符将一行拆分为bash中的数组

我有以下格式的文件,它是制表符分隔的

a   k   testis  adult   male    8 week  rRNA
b   k   testis  adult   male    8 week  rRNA
c   k   testis  adult   male    8 week  rRNA
Run Code Online (Sandbox Code Playgroud)

我想在每一行上做一些操作,所以我使用了一个 while 循环。我想在选项卡上拆分每一行,然后存储让我们说第 6 列8 week的变量。我正在使用此代码,但无法获得我想要的

while read -r line; do tmp=(${line///}); col6=${tmp[5]}; echo "$col6"; done < file.txt
Run Code Online (Sandbox Code Playgroud)

这给了我8而不是8 week。8 周在 8 和周之间有一个空格,因此我想在选项卡上拆分该行。

bash array

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

使用 awk 拆分列

我有一个如下所示的文件。第 9 列的值由 ** 连接。

chrXV   234346  234546  snR81   +       SNR81   chrXV   234357  0.0003015891774815342**0.131826816475   +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234385  0.0002208827994288481**0.0118547789578  +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234396  0.0001799579220002955**0.00583993781634 +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234410  0.003451057940295026**0.00352844797952  +
Run Code Online (Sandbox Code Playgroud)

我想要一个输出,其中我可以将 2 个值作为 sep 列。我怎样才能在 awk 中做到这一点。

这是我想要的输出。显示输出的第一行:

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +
Run Code Online (Sandbox Code Playgroud)

awk

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

删除每列中包含 NA 的行

我有一个制表符分隔的文件,如下所示:

gene    v1  v2  v3  v4
g1  NA  NA  NA  NA
g2  NA  NA  2   3
g3  NA  NA  NA  NA
g4  1   2   3   2
Run Code Online (Sandbox Code Playgroud)

每行中的字段数是固定且相同的。我想从上面的文件中删除那些行,其中从第 2 列到最后一列的每一行的所有字段都是 NA。然后输出应如下所示:

gene    v1  v2  v3  v4
g2  NA  NA  2   3
g4  1   2   3   2 
Run Code Online (Sandbox Code Playgroud)

awk perl text-processing bioinformatics

8
推荐指数
4
解决办法
1976
查看次数

从基因列表中识别基因

我有一个基因列表文件。像这样的事情

    SWT21
    SSA1
    NRP1
    EFB1
    TFC3
    MDM10
Run Code Online (Sandbox Code Playgroud)

我还有另一个文件,其中也包含我列表中这些基因的名称以及有关它们的其他基本信息。第二个文件看起来像这样:

chrI    147593  151166  YAL001C -   TFC3
chrI    143706  147531  YAL002W +   VPS8
chrI    142173  143160  YAL003W +   EFB1
chrI    140759  141407  YAL004W +   YAL004W
chrI    139502  141431  YAL005C -   SSA1
chrI    137697  138345  YAL007C -   ERP2
chrI    136913  137510  YAL008W +   FUN14
chrI    135853  136633  YAL009W +   SPO7
chrI    134183  135665  YAL010C -   MDM10
Run Code Online (Sandbox Code Playgroud)

我想在第二个文件中提取那些具有第一个文件中存在的基因名称的行。

grep awk text-processing

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

带有命令替换内容的 echo 变量

我写了一个非常基本的命令替换脚本,如下所示:

#!/bin/bash
files=$(ls *.fastq);
echo $files
Run Code Online (Sandbox Code Playgroud)

该目录包含一堆 .fastq 文件,我只想使用 echo 命令来输出它们

上面的 sript 输出 fastq 文件,每个 fastq 文件名之间有一个空格。

当我以这种方式使用它时

#!/bin/bash
files=$(ls *.fastq);
echo "$files"
Run Code Online (Sandbox Code Playgroud)

它在新行上打印结果。

为什么会这样?这与命令替换有关吗?

谢谢

shell echo quoting command-substitution

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

在任何字母前添加一个符号

我有一个文本文件,每行都有一些定义的字段数,但它们可能因行而异。我想要做的就是在该行字段中的每个值前添加“=”符号。

例如输入文件

A   B   C   D   E
P   Q   R   S   T   U
L   M   N   O
Run Code Online (Sandbox Code Playgroud)

输出文件

=A  =B  =C  =D  =E
=P  =Q  =R  =S  =T  =U
=L  =M  =N  =O
Run Code Online (Sandbox Code Playgroud)

这也只是一个例子,我的文件包含一些字段数超过 20 的行。如何有效地做到这一点。

awk

5
推荐指数
3
解决办法
4366
查看次数

删除列中的扩展名

我有一个这样的文件

ILMN_1343291    TGTGTTGAGAGCTTCTCAGACTATCCACCTTTGGGTCGCTTTGCTGTTCG  NM_001402.5
ILMN_1343295    CTTCAACAGCGACACCCACTCCTCCACCTTTGACGCTGGGGCTGGCATTG  NM_002046.3
ILMN_1651209    TCACGGCGTACGCCCTCATGGGGAAAATCTCCCCGGTGACTTTCAGGTCC  NM_182838.1
Run Code Online (Sandbox Code Playgroud)

我想从第三列的末尾删除数字扩展名,以便我的输出文件看起来像这样

ILMN_1343291    TGTGTTGAGAGCTTCTCAGACTATCCACCTTTGGGTCGCTTTGCTGTTCG  NM_001402
ILMN_1343295    CTTCAACAGCGACACCCACTCCTCCACCTTTGACGCTGGGGCTGGCATTG  NM_002046
ILMN_1651209    TCACGGCGTACGCCCTCATGGGGAAAATCTCCCCGGTGACTTTCAGGTCC  NM_182838
Run Code Online (Sandbox Code Playgroud)

我怎样才能在命令行上最好使用awk?我可以做到这一点,perl但我很确定只有一个命令行可以做到这一点。

sed awk text-processing

5
推荐指数
2
解决办法
3262
查看次数