标签: awk

使用sed删除两个匹配模式之间的所有行,包括匹配的行

我需要删除文件中匹配的特定模式和匹配的行之间的行。

在下面的代码中,我要删除对象Host“ kali” {中的行到下一次出现的}(而不是最后一次出现的})。并在删除后删除空白区域。

object Host "linux" {
import "windows"
address = "linux"
groups = ["linux"]
}


object Host "kali" {
import "linux"
address = "linux"
groups = [linux ]
}


object Host "windows" {
import "linux"
address = "linux"
groups = ["windows" ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

clear
echo -e  "Enter the host to delete in config file"
cat > deletionfile.txt
clear
while read host
do
loc=`grep -il 'object.*Host.*"$host"' /home/afrith/config-file/*.conf`
sed -i "/^object.*Host.*\"$host\".*{$/,/^}$/d" $loc
done < deletionfile.txt …
Run Code Online (Sandbox Code Playgroud)

shell awk sed data-manipulation

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

将列转置为行,最后不使用分隔符

我将列换行:

awk 'BEGIN { ORS = "," } { print }' file
Run Code Online (Sandbox Code Playgroud)

文件:

45
78
45
Run Code Online (Sandbox Code Playgroud)

结果是:

45,78,45,
Run Code Online (Sandbox Code Playgroud)

如何删除行尾的逗号?我试过了:

awk 'BEGIN { ORS = "," } { print substr($1, 1, length($1)-1)}' file
Run Code Online (Sandbox Code Playgroud)

但这不适用于分隔符。

awk

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

如何在一行中计算匹配的模式?

enter code here我有一个包含序列的 fasta 文件

>lcl|QCYY01003067.1_cds_ROT65593.1_2 
ATGCGTCTCCCCTTTAGAGAGTTCTCTCTAGCTACGTA
>lcl|QCYY01003067.1_cds_ROT65593.1_3
ATCTCTNNNNNNNNNNATATCCCCTTTNNNNNCTCTCT
>lcl|QCYY01003067.1_cds_ROT65593.1_4
ATCTCTNNNNNNNNNNATATCCCCTTCTCGGGGCCCC 
Run Code Online (Sandbox Code Playgroud)

我想计算“N”的数量以及每行中出现的模式数量。无需包含标题 (>lcl|QCYY01003067.1_cds_ROT65593.1_2 )

例如:-

 line 2=0,0
 line 4=15,2
 line 6=10,1
Run Code Online (Sandbox Code Playgroud)

如何改进此代码:

grep -n '[{N}]' <filename> | cut -d : -f 1 | uniq -c
Run Code Online (Sandbox Code Playgroud)

shell awk grep design-patterns count

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

Bash:如何计算文件中字符串出现的次数?

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

dog
cat
dog
dog
fish
cat
Run Code Online (Sandbox Code Playgroud)

我想在 Bash 中编写某种代码来使文件格式化为:

dog:1
cat:1
dog:2
dog:3
fish:1
cat:2
Run Code Online (Sandbox Code Playgroud)

关于如何做到这一点的任何想法?该文件非常大(> 30K 行),所以代码应该有点快。

我在想某种循环......

像这样:

while read line; 
     echo "$line" >> temp.txt
     val=$(grep $line temp.txt)
     echo "$val" >> temp2.txt
done < file.txt 
Run Code Online (Sandbox Code Playgroud)

进而 paste -d ':' file1.txt temp2.txt

但是,我担心这会很慢,因为您要逐行进行。其他人怎么看?

string bash awk grep

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

按关键字搜索并提取分隔符内的短语

我有一个列数据如下:

abc|frame|gtk|enst.24|pc|hg|,abc|framex|gtk4|enst.35|pxc|h5g|,abc|frbx|hgk4|enst.23|pix|hokg|
abc|frame|gtk|enst.15|pc|hg|,abc|framex|gtk2|enst.59|pxc|h5g|,abc|frbx|hgk4|enst.18|pif|homg|
abc|frame|gtk|enst.98|pc|hg|,abc|framex|gtk1|enst.45|pxc|h5g|,abc|frbx|hgk4|enst.74|pig|hofg|
abc|frame|gtk|enst.34|pc|hg|,abc|framex|gtk1|enst.67|pxc|h5g|,abc|frbx|hgk4|enst.39|pik|hoqg|
Run Code Online (Sandbox Code Playgroud)

我想搜索和提取框架内的特定关键字,并仅提取分隔符中的数据

具体关键词是

enst.35
enst.18
enst.98
enst.63
Run Code Online (Sandbox Code Playgroud)

预期的输出是

abc|framex|gtk4|enst.35|pxc|h5g|
abc|frbx|hgk4|enst.18|pif|homg|
abc|frame|gtk|enst.98|pc|hg|
NA
Run Code Online (Sandbox Code Playgroud)

如果未找到匹配,则在输出列中用 NA 填充。同一列中可以多次出现 id,但我只想考虑第一次出现。我在这里尝试过但没有有效地工作。我们可以用 bash 脚本来做到这一点吗

bash awk pandas

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

使用 awk 剪切特定部分

我正在处理许多包含路径示例的行:

posterita/posterita/web/jsp/pos/posReport1.jsp
build/web/view.jsp
uPortal-webapp/src/main/webapp/WEB-INF/flows/user-manager/selectUserAction.jsp
config/auth.php
database/seeds/DatabaseSeeder.php
admin/modules/announcement/functions.inc.php
Run Code Online (Sandbox Code Playgroud)

我需要做什么使用 bash 打印第一个目录我希望输出像

posterita
build
uPortal-webapp
config
database
admin
Run Code Online (Sandbox Code Playgroud)

与第二和第三目录相同的方法

posterita
web
src
seeds
modules
Run Code Online (Sandbox Code Playgroud)

我如何使用 awk、sed 或 cut 来执行此操作?

bash awk cut sed

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

使用管道和字数(wc)然后修饰结果

我想打扮我正在做的 grep 的输出。

想象一个包含大量文本的文件 text.txt。然后我执行以下命令:

grep fred text.txt | wc -l
grep bob text.txt | wc -l
grep james text.txt | wc -l
Run Code Online (Sandbox Code Playgroud)

我得到输出:

12
3
4
Run Code Online (Sandbox Code Playgroud)

我想打印的输出是:

fred was found on 12 lines.
bob was found on 3 lines.
james was found on 4 lines.
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

awk grep wc

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

如何均衡列的块的长度

嗨专家我有一个如下所示的文件我想根据块的最大长度通过在预期答案中给出的末尾附加零来均衡由 > 符号分隔的所有列块。谢谢。

>
1 2 3
3 4 5
>
3 4 5
>
2 3 4
3 4 5
3 4 5
Run Code Online (Sandbox Code Playgroud)

预期产出

>
1 2 3
3 4 5
0 0 0
>
3 4 5
0 0 0
0 0 0
>
2 3 4
3 4 5
3 4 5
Run Code Online (Sandbox Code Playgroud)

linux bash shell awk

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

使用正则表达式提取子字符串

我有以下文件:

> cat hit.txt | head
gene.69778.3.0.p1
gene.65186.0.2.p1
chr11_pilon3.g961.t1
gene.3169.3.4.p1
chr11_pilon3.g3568.t1
gene.1708.8.0.p1
gene.41465.0.3.p1
chr04_pilon3.g11582.t1
gene.101930.0.1.p1
gene.93918.0.0.p1
gene.65186.8.2.p1
Run Code Online (Sandbox Code Playgroud)

我想得到这个输出:

gene.69778
gene.65186
gene.3169
gene.1708
gene.41465
gene.101930
gene.93918
gene.65186
Run Code Online (Sandbox Code Playgroud)

我只能弄清楚awk '$1 ~ /^gene/'。如何获得上述输出?

awk

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

打印整行,当发现重复时

这是我输入的片段:

DGD3 SOL10
DGD53 SOL15
DGD100 SOL15
DGD92 SOL20
DGD41 SOL22
DGD62 SOL35
DGD13 SOL40
DGD13 SOL40
Run Code Online (Sandbox Code Playgroud)

我的预期输出

DGD53 SOL15
DGD100 SOL15
DGD13 SOL40
DGD13 SOL40
Run Code Online (Sandbox Code Playgroud)

在我的数据中,我有时会重复 SOL(不超过两次重复,而不是例如文件中某些 SOL 的三倍,但仅重复)。SOL 在我的第二列中($2)。因此,当我找到重复的 SOL($2)时,我需要一个打印整行(DGD 和 SOL)的程序。你可以帮帮我吗?

awk data-processing

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

标签 统计

awk ×10

bash ×4

grep ×3

shell ×3

sed ×2

count ×1

cut ×1

data-manipulation ×1

data-processing ×1

design-patterns ×1

linux ×1

pandas ×1

string ×1

wc ×1