小编jub*_*us1的帖子

仅将全大写行转换为小写

举个例子,假设我有:

One, Two.
OnE, Two.
ONE, TWO.
Run Code Online (Sandbox Code Playgroud)

我只想将全部大写的行替换为小写,这样我就得到:

One, Two.
OnE, Two.
one, two.
Run Code Online (Sandbox Code Playgroud)

我在尝试:

gsed '/[a-z]/!c\L&'
Run Code Online (Sandbox Code Playgroud)

它正确匹配行,但将其替换为:L&

One, Two.
OnE, Two.
L&
Run Code Online (Sandbox Code Playgroud)

如何将其转换为小写?

我在 L 之前尝试了 2 或 3 个反斜杠,但它只是将它们放入输出中。

如果有更好的选择,我将使用 awk 或 tr 或其他一些实用程序。

另外,如果版本很重要:

gsed --version
gsed (GNU sed) 4.9
Run Code Online (Sandbox Code Playgroud)

sed text-processing

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

使用 sed 在每行开头捕获不同长度的数字

我正在处理一个格式如下的文件:

12345:ABCDEFG

789:HIJK

4963158:LMNOPQRSTUV
Run Code Online (Sandbox Code Playgroud)

每行以不同长度的数字开头,后跟一个冒号,然后是一串不同长度的字母。我想只捕获每行开头的数字并将它们放入一个新文件中,如下所示。

12345

789

4963158
Run Code Online (Sandbox Code Playgroud)

这与我得到的最接近,但它仍然打印整行,而不仅仅是数字。

sed -r 's/([^0-9]+d)(:)([A-Z]+)$/\1/' example.txt >> justnumbers.txt

我在语法上做错了什么?

sed

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

UNIX命令添加逗号和空格

我有一个看起来像这样的文件

$ cat IP
10.3.1.1
10.4.1.1
10.6.3.1
10.19.4.2
10.22.3.4
Run Code Online (Sandbox Code Playgroud)

我如何让它看起来像:

$ cat IP 
10.3.1.1, 10.4.1.1, 10.6.3.1, 10.19.4.2, 10.22.3.4
Run Code Online (Sandbox Code Playgroud)

scripting sed shell-script text-processing

6
推荐指数
4
解决办法
1489
查看次数

如何将csv文件中除“0”和前两个字段之外的所有文本转换为1?

我有几个大的 .csv 文件,我想将它们转换为二进制(1 和 0)格式。其中,除前两个字段外,所有包含文本的单元格都将变为 1,0 将保持为 0。

head Test.csv
Iss1,1,0,0,Hsapiens-I34,0,0,0,Mmusculus-H01,0,0
Iss1,11,0,Scerevisiae-U09,Hsapiens-I05,0,0,0,0,0,0
Iss1,21,0,0,Hsapiens-I05,0,0,0,Hsapiens-I31,0,0
Iss1,31,0,0,Mmusculus-H13,0,0,0,0,0,Hsapiens-I31
Iss1,41,0,Scerevisiae-U09,0,0,0,0,0,0,Hsapiens-I21
Iss1,51,0,0,0,0,0,0,Scerevisiae-U25,0,Hsapiens-I21
Iss1,61,0,0,Hsapiens-I34,0,0,0,Mmusculus-H13,0,0
Run Code Online (Sandbox Code Playgroud)

预期结果是

head Test.csv
Iss1,1,0,0,1,0,0,0,1,0,0
Iss1,11,0,1,1,0,0,0,0,0,0
Iss1,21,0,0,1,0,0,0,1,0,0
Iss1,31,0,0,1,0,0,0,0,0,1
Iss1,41,0,1,0,0,0,0,0,0,1
Iss1,51,0,0,0,0,0,0,1,0,1
Iss1,61,0,0,1,0,0,0,1,0,0
Run Code Online (Sandbox Code Playgroud)

其中文件中的所有文本都转换为 1。

如果有人能给我一些关于如何克服这个问题的建议,我将不胜感激。

谢谢

command-line awk text-processing bioinformatics

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

AWK - SED - 如果以数字开头,则在每列的开头添加一个字符

如何在以数字开头的每列的开头添加一个字符:

添加 ac的示例:
4 r4 8 8 4

所以我得到这个输出:
c4 r4 c8 c8 c4

它应该适用于可变数量的列。

sed awk text-processing

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

重新排列文件内容以将记录“标题”行添加到每个记录“正文”行

任何人都知道如何扭转这个:

FX_AM140_EML AM140
Backend/aa.java
Backend/bb.java
Backend/cc.java
Backend/dd.java
Backend/ee.java

FX_AM172_EML AM172
Backend/aa.java
Backend/bb.java
Run Code Online (Sandbox Code Playgroud)

到这个?

FX_AM140_EML AM140 Backend/aa.java
FX_AM140_EML AM140 Backend/bb.java
FX_AM140_EML AM140 Backend/cc.java
FX_AM140_EML AM140 Backend/dd.java
FX_AM140_EML AM140 Backend/ee.java
FX_AM172_EML AM172 Backend/aa.java
FX_AM172_EML AM172 Backend/bb.java
Run Code Online (Sandbox Code Playgroud)

text-processing

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

找到重复的第一个字段并将其值连接在单行中

我有一个文件,其中的条目key: value格式如下:

猫数据.txt

name: 'tom'
tom_age: '31'
status_tom_mar: 'yes'
school: 'anne'
fd_year_anne: '1987'
name: 'hmz'
hmz_age: '21'
status_hmz_mar: 'no'
school: 'svp'
fd_year_svp: '1982'
name: 'toli'
toli_age: '41'
Run Code Online (Sandbox Code Playgroud)

同样...

我只需要查找并打印那些key: value具有重复键作为单个条目的键。

下面的代码让我得到重复的键

cat data.txt | awk '{ print $1 }' | sort  | uniq -d
name:
school:
Run Code Online (Sandbox Code Playgroud)

但是,我想要输出将重复键的值连接在一行中。

预期输出:

name: ['tom', 'hmz', 'toli']
school: ['anne', 'svp']
tom_age: '31'
status_tom_mar: 'yes'
fd_year_anne: '1987'
hmz_age: '21'
status_hmz_mar: 'no'
fd_year_svp: '1982'
toli_age: '41'
Run Code Online (Sandbox Code Playgroud)

你能建议一下吗?

awk text-processing uniq yaml

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

我们如何从第 1 列的一系列值中找到第 3 列的最大值?

我在 Ubuntu 机器上有这个数据集:

37.500  0.0000  0.005605
37.750  0.0000  -0.027858
38.000  0.0000  -0.060678
38.250  0.0000  -0.088557
38.500  0.0000  -0.109210
38.750  0.0000  -0.122482
39.000  0.0000  -0.129770
39.250  0.0000  -0.133190
39.500  0.0000  -0.134538
39.750  0.0000  -0.134015
40.000  0.0000  -0.129660
40.250  0.0000  -0.117858
40.500  0.0000  -0.094709
40.750  0.0000  -0.057622
41.000  0.0000  -0.006853
Run Code Online (Sandbox Code Playgroud)

我需要找到第 3 列的最大值,该最大值位于第 1 列的 38 和 40 之间。

这只是一个示例数据集。

awk text-processing

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

如何打印数字小于阈值的最长行序列?

我正在学习Perl,但我不知道如何解决这个问题。

我有一个.txt以下形式的文件:

1 16.3346384
2 11.43483
3 1.19819
4 1.1113829
5 1.0953443
6 1.9458343
7 1.345645
8 1.3847385794
9 1.3534344
10 2.1117454
11 1.17465
12 1.4587485
Run Code Online (Sandbox Code Playgroud)

第一列仅包含行号,此处不感兴趣,但它存在于文件中;第二列中的值是相关部分。

我想输出第二列中编号小于 2.00 的最长连续行序列。对于上面的示例,这将是第 3 行到第 9 行,输出应为:

1.19819
1.1113829
1.0953443
1.9458343
1.345645
1.3847385794
1.3534344
Run Code Online (Sandbox Code Playgroud)

sed awk perl text-processing

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

删除目录中多个文本文件的特定字符串之后的所有文本

我有大约 25,000 个 JSON 文件需要验证和检查,我注意到一些文件已经重复,导致使用 Excel 将 JSON 转换为 CSV 时出现错误。

我试图删除之后的所有字符串,"version":"0.2.3"}因为这表明 JSON 的结尾,然后再重复,"version": "0.2.3"}{"analysis": {因此我需要保留并"version": "0.2.3"}删除{"analysis": {其后面的所有内容,并将这些更改应用到所有 25,000 个文件。我见过有人使用 grep 和 sed 但我自己似乎无法让它们工作。

如果有人可以提供帮助,我将不胜感激,因为手动删除文本是不可取的,所以我希望在 bash 或其他东西中有一个衬垫!

下面是我需要修复的内容(其中一个文件的精简版本),下面是所需的输出。正如您所看到的,无论出于何种原因,JSON 数据可能会在 API 使用过程中自我复制。

有问题的输入(已修剪json):

{"analysis":{"score":3},"sample":{"completed":"2022-01-27T21:22:21Z","created":"2022-01-27T21:17:57Z","id":"220127-z5h84saffl","md5":"7871a75734af389b787bad57a3ea087d","score":3,"sha1":"58a8689ee76a46559ea56a52d20425f44c8ff601","sha256":"23c5dee027c7969aabb5828641c55a005f30fb166a5006dbe3a817f56ca0e32a"},"version":"0.2.3"}{"analysis":{"score":3},"sample":{"completed":"2022-01-27T21:22:21Z","created":"2022-01-27T21:17:57Z","id":"220127-z5h84saffl","md5":"7871a75734af389b787bad57a3ea087d","score":3,"sha1":"58a8689ee76a46559ea56a52d20425f44c8ff601","sha256":"23c5dee027c7969aabb5828641c55a005f30fb166a5006dbe3a817f56ca0e32a"},"version":"0.2.3"}
Run Code Online (Sandbox Code Playgroud)

期望的输出:

{"analysis":{"score":3},"sample":{"completed":"2022-01-27T21:22:21Z","created":"2022-01-27T21:17:57Z","id":"220127-z5h84saffl","md5":"7871a75734af389b787bad57a3ea087d","score":3,"sha1":"58a8689ee76a46559ea56a52d20425f44c8ff601","sha256":"23c5dee027c7969aabb5828641c55a005f30fb166a5006dbe3a817f56ca0e32a"},"version":"0.2.3"}
Run Code Online (Sandbox Code Playgroud)

sed text-processing json

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

如何拆分文本文件中给定列的字符串值

我在 Linux 机器上有一个包含两列的文本文件:

  • 第1列 = id_no(大部分为5位,有的为6位);
  • 第 2 列 = Genetic_markers(全部长度为 50674 位);
12345 0102010205
54322 2221110051
123456 1122011510
Run Code Online (Sandbox Code Playgroud)

我想将文件更改为如下所示:

 12345 0 1 0 2 0 1 0 2 0 5
 54322 2 2 2 1 1 1 0 0 5 1
123456 1 1 2 2 0 1 1 5 1 0
Run Code Online (Sandbox Code Playgroud)
  1. 如何更改第一列,使其向右对齐(如数字所示)?

  2. 有人可以帮我用最可靠的方法来更改第二列数字之间的空格吗?请解释代码的元素及其作用。

谢谢

sed awk text-processing bioinformatics

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

使用 awk 将新行替换为空格

我有一个由目录中所有文件生成的文本文件。我想使用此文件作为我拥有的脚本的输入,但我需要以特定方式格式化文本文件才能正确解析。

目前,文本文件(文件名列表)的格式如下:

A1_R1.fastq.gz
A1_R2.fastq.gz
A2_R1.fastq.gz
A2_R2.fastq.gz
A3_R1.fastq.gz
A3_R2.fastq.gz
Run Code Online (Sandbox Code Playgroud)

我需要每个样本的配对读取(具有相同名称但不同RN值的文件)位于同一行,并用制表符分隔:

A1_R1.fastq.gz A1_R2.fastq.gz
A2_R1.fastq.gz A2_R2.fastq.gz
A3_R1.fastq.gz A3_R2.fastq.gz
Run Code Online (Sandbox Code Playgroud)

由于我有 >1000 个条目,我希望有一种使用 awk 或类似方法来修改文件的方法,但我对 awk 没有太多经验。

awk text-processing bioinformatics

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

根据某些标准过滤行

我有一些.vcf文件,我想过滤掉一些变体。这只是我文件的一小部分:文件开头有一些标题行(以 ## 开头),然后是变体(每个变体一行)。

##fileformat=VCFv4.2
##source=combiSV-v2.2
##fileDate=Mon May  8 11:32:53 2023
##contig=<ID=chrM,length=16571>
##contig=<ID=chr1,length=249250621>    
##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
##INFO=<ID=SVCALLERS,Number=.,Type=String,Description="SV callers that support this SV">
##FORMAT=<ID=GT,Number=1,Type=String,Description="Genotype">
##FORMAT=<ID=DR,Number=1,Type=Integer,Description="# High-quality reference reads">
##FORMAT=<ID=DV,Number=1,Type=Integer,Description="# High-quality variant reads">
#CHROM  POS ID  REF ALT QUAL    FILTER  INFO    FORMAT  Sample
1   10862   id.1    N   <INS>   .   PASS    SVTYPE=INS;SVLEN=101;END=10862;SVCALLERS=cutesv,SVIM    GT:DR:DV    1/1:0:26
1   90258   id.2    N   <INS>   .   PASS    SVTYPE=INS;SVLEN=118;END=90258;SVCALLERS=SVIM,NanoSV    GT:DR:DV    1/1:0:9
1   90259   id.3    N   <INS>   .   PASS    SVTYPE=INS;SVLEN=36;END=90259;SVCALLERS=Sniffles    GT:DR:DV    0/1:44:7
1   185824 …
Run Code Online (Sandbox Code Playgroud)

command-line text-processing bioinformatics

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