我是AWK的新手
我有一个大的文本文件(>3GB)。喜欢使用AWK line命令以该顺序提取/打印所选行(行#62、#152和153),并每217行迭代一次,直到文件中的记录结束
试图从网上搜索和学习。尝试了下面的方法,但似乎不起作用
awk '{(for (i=62; i<=NR; i=i+217)||for (i=62; i<=NR; i=i+217)||for (i=62; i<=NR; i=i+217)); print}' file.txt
你能帮我指点一下吗?或者带
所以昨天我使用sed命令将多个文件的第n行读取到单个输出中
我能够生成一个data.txt文件,它看起来像这样:
0 0 0
-1.08051e-16 -1.73991e-16 -1.79157e-16
-1.02169e-15 -1.19283e-15 5.92632e-16
3.41114e-16 -1.02211e-15 3.19436e-15
......
请注意,它们都是表示x、y和z轴的位置数据。现在我只想使用awk命令再添加一列来表示时间步长,它对应于我的转储文件的数量,
在AWK中分配任何字段时,将重新计算$0,并用输出字段分隔符(OFS)替换原始字段分隔符。但是我希望在更改字段时,$0中的字段分隔符保持不变。我的输入字段分隔符(FS)是一个正则表达式,因此简单地使输出文件分隔符与输入文件分隔符相同是不行的
在$0中,是否有任何方法可以在不更改字段分隔符的情况下更改字段
编辑:
我的输入字段分隔符是FS=“([^[:digit:][\\,][124;^)+0*[\\,][0*”。
我的脚本检查等号左侧的数字,并针对每行输入相应地更改右侧的数字(确切地说,它查找并
下面的awk将在file2的$2中的file1中查找ID,如果它们匹配,则打印$2。如果在file2(如ARRR和AAAA)中缺少或未找到id,我无法找出如何将其添加到输出中的行中,因为在$3中缺少相同的格式。也就是说,$1中的下一个序列号,$2中的文件1中的id,以及$3中缺少的单词。谢谢:)
awk
awk -F'\t' 'NR==FNR{A[$1];next}$2 in A' file1 file2
文件1空格分隔
AARS
AARS2
AARS2;TMEM151B
ARRR
AAAS
在下面的awk中,仅当$3是一个特定的值(ID)时,我才尝试使用\ucode>解析$2。我正在将解析后的值读入数组,并将其用作查找中的键。虽然执行了awk,但是$3中的整个第2行或带有ID的行并不仅仅打印所需的内容。print语句仅用于查看结果(仅用于测试),不属于脚本的一部分。谢谢:)
awk
awk -F'\t' '$3=="ID"
f="$(echo $2|cut -d_ -f1,1)"
{
print $f
我有一个有效的YAML:
---
name: first
metadata: a
---
name: second
metadata: b
---
name: third
metadata: c
如何在文件first.yaml、second.yaml和third.yaml中使用一行AWK脚本拆分它?解决方案需要使用任何名称
只需拆分文件就可以了,但我不知道如何添加正确的文件名而不是行号(NR):
编辑:再添加一个解决方案
awk '
/name:/{
close(file)
file=
这个问题的目的是用一个不明显的解决方案发布一个问题的规范答案——复制数组数组(数组数组需要GNU awk)
给定一组数组,如gawk手册中关于以下内容的部分所示:
您将如何编写一个copy_array函数来处理数组数组数组,将现有数组复制到新数组中,这样新复制的数组的walk_array()后续调用将为新数组输出与原始数组相同的值,即:
BEGIN {
a[1] = 1
a[2][1] = 21
a[2][2] = 22
a[3] = 3
a[4][1][
我有以下问题。我正在解释一个输入文件,现在我遇到了这样一个问题:
我需要将%%BLANKx转换为x空格
因此,在输入文件中,我发现例如%%BLANK8,我需要将%%BLANK8替换为8空格,%%BLANK10替换为10空格等。您可以在%%BLANK标记上拆分字符串。
之后,您可以读取任何令牌中的第一个数字,并将其转换为空格。
现在,您可以将每个令牌合并到一个新字符串中。试试这个。我还没有完全测试过
$ awk '/BLANK/{ match($0,/%%BLANK([0-9]+)/,a);s=s
我正在尝试查找my/etc/passwd中用户id为0的所有用户。它应该显示用户名和用户id。我尝试了以下操作:
awk -F: '{
count[$3]++;}END {
for (i in count)
print i, count[i];
}' passwd
它给出了重复的用户ID以及它们出现的次数。我实际上也希望用户名和重复的用户ID类似
zama 0
root 0
bin 100
nologin 100
如果该解决方案配备awk辅助阵列
我想使用awk脚本在另一个文件中输出具有匹配字符串的记录
文件1代码
849002|48|1208004|1
849007|28|1208004|1
855003|48|1208004|1
855004|28|1208004|1
855006|28|1208004|1
文件2代码:
00990029000000004804470425|ST1400029|0.550|Recurring|1248073|ST1400029
00990029000000008410517183|IM1450029
我有一个关于AWK中拉丁字母-1的问题,例如ï(上面有两个点的I)(239))
当我在AWK中创建的字符串中用I替换ï时(我用一替换两个点),它可以工作:
A="Aïda"
A=gensub("ï","i","g",A)
但当我这么做的时候
awk '
{
$0=gensub("ï","i","g",$0)
}' \
<(cat units.csv)
awk'
{
$0=gensub(“ï”、“i”、“g”和$0)
}' \
awk不会将更改写回原始文件(输入),您必
如果我在一个文件中有两行如下所示:
1 222 333
4 555 666
是否有一种方法可以同时访问所有这些内容,以便:
$1=1,$2=222,$3=333,$4=444,$5=555,$6=666
有什么想法吗?将您的RS更改为唯一的8位ascii字符值,该值不存在于其中,例如
awk 'BEGIN{RS="\xFF"}{print $1, $2, $3, $4, $5, $6}' file
将RS更改为其中不存在的唯一8位ascii字符值,例如
awk 'BEGIN{RS="\xFF
我总共有三个文件f1.txt、f2.txt和f3。具有不同大小列的txt,如下所示。我正在尝试将文件2的模式与文件1匹配,如果找到匹配项,则用文件3替换文件1内容以实现特定匹配。事实上,文件2和文件3是相似的,但文件3是前导零
文件1:
8841
841
526
548
547
88
98
文件2:
841
526
548
547
文件3:
00841
0526
000548
00547
所需的输出在文件1中,也可以是其他文件
8841
00841
0526
000548
00547
88
我有两个大的选项卡分开的文件A.tsv和B.tsv,它们看起来像(文件中没有标题):
我想选择一个ID列表,以便10=>A.txt;完成;cat A.txt
用户8 8
用户10 10
用户12
用户14 14
用户16 16
用户18 18
用户20 20
用户22 22
以美元表示的I的美元(序号8 2 22);do echo-e“User$I\t100${I}00”>>B.txt;完成;cat B.txt
用户8 100800
用户10 1001000
用户12 1001200
用户14
我在一个文件中有这样的数据,如下所示
60.5(r) 426.5(f) 810.5(r) 1176.5(f) 1560.5(r) 1926.5(f) 2310.5(r) 2676.5(f) 3060.5(r) 3426.5(f) 3810.5(r) 4176.5(f) 4560.5(r) 4926.5(f) 5310.5(r) 5676.5(f) 6060.5(r) 6426.5(f) 6810.5(r) 7176.5(f) 7560.5(r) 7926.5(f) 8310.5(r)
所有内容
我有一个名为through.awk的awk文件,用于根据NS-2中的跟踪文件计算吞吐量
BEGIN {
FS="[[:space:]]|_"
}
{
action = $1;
node_id = $4;
time = $2;
dest = $6;
app = $10;
pkt_size = $11;
if ( action == "r" && dest == "MAC" && app == "cbr" &&
我有这样一个文件:
22710005 Bra000017 22710005 Bra000017 22710005
CUSTOM22710675_oT.1 Bra000032_oG.1
CUSTOM22710675_oT.1 Bra000032_oG.1
22712128 Bra000040 22712128 Bra000040 22712128
22712128 Bra000040 22712128
我有一个文本文件(a.txt),如:
如果模式“SS(ii)”出现在“a B C D”之后的第三行中,我想为与“a B C D”匹配的记录的第二个字段分配一个新值(例如BB)。比如:
A BB C D
.
.
SS (ii)
.
A B C D
.
.
.
.
A B C D
awk'{a[NR]=$0}END{for(i=1;i以下是一种方法:
awk 'FNR==NR {if (/A B C D/) f=NR; if ($0~/SS \(ii\)/ && f &&a
我需要删除一个大文件中的行,其中包含的值大于用户指定的数字(见图)。例如,我想去掉值大于5e-48(x>5e-48)的行。E带有7e-46、7e-40、1e-36等的管线,。。。。应该删除
sed、grep、awk或任何其他命令可以做到这一点吗
多谢各位
马库斯
使用awk时:
awk '$3 <= 5e-48' filename
例如,在Perl中,awk'$3,解决方案可以是
perl -ane'print unless$F[2]>5e-48'
如果文件以制表符分隔,请添加-
在zsh中向awk传递一个可变行号和字符串,并让awk在给定行号处插入字符串,语法是什么样的
#!/bin/zsh
freq_pols=('10 10' '10 11c' '10 11s' '10 20' '10 21c' '10 21s' '10 22c' '10 22s' '11c 11c' '11c 11s' '11c 20' '11c 21c' '11c 21s' '11c 22c' '11c 22s' '11s 11s' '11s 20' '11s 21c' '11s 21s' '1
刚接触awk,尝试做一些可能很简单的事情,但这需要我一段时间。为了简化,我有一个名为“sample”的文本文件,其中包含以下行:
164516454242451BX%美国俄亥俄州Apt 110 225 1784
我希望使用awk获得以下输出:
110 225室
有没有办法拆分$1,使“Apt”成为一个单独的字段?我正在尝试的代码如下所示。我没有收到任何错误,但输出只有两个空行
awk '
BEGIN {
split($1," ","%")
}
print $2,$3,$4
END {
print
我试图提取如下所示的块注释:
<tag_1:sub_tag>
This is 1 comment.
</tag_1:sub_tag>
这是一条评论。
或
这是另一个评论。
通过
find-键入f-exec awk'/',//{打印文件名“:“FNR”:“$0}”{}\;
但是我不知道如何让$variable接受任何东西,比如使用通配符*。有办法吗
这必须在子文件夹上递归完成 快来营救
awk '/<tag_1>/,/<\/tag_1>/
我正试图用awk解析下面的输入。
如果只有3对项目,这意味着如果有ID=34,ID2=35,COL3=“231,输出看起来很好。
但是,项目的数量(ID/ID2/COL3)不同,这就是问题所在
即使项目数量不固定,如何打印所有这些项目
输入
输出
ID=34,ID2=35,COL3="231"#>
ID=99,ID2=23>#
ID=18,ID2=87<#
ID=11,ID2=22,COL3="231",COL4="098",#COL5="AAA",
ID=34,ID2=35
我有一个带有二进制序列[010101…]的文件,我想得到文件中生成最多的5位序列
我的文件示例:
00010111000100100100100100100101110101010100011001010111011100010
我首先生成所有可能的序列,也就是说,如果我取前7位,我将得到以下序列:
00010 00101 01011
现在我正在寻找一种方法来计算文件中每个序列的出现次数
有什么帮助吗?如果您使用的是perl,您可以这样做:
use strict;
use warnings;
我有两个文件,如下图所示,以制表符分隔:
归档
chr1 123,aa aa b c d
chr1 234,dd a b c d
chr1 af,345,e aa b c d
chr1 456 a b c d
....
文件B
xxxx abcd chr1 123,dd aa c d e
yyyy defg chr1 aa,345 aa e f g
...
我需要根据fileB中的$4和fileA
标签: Awk
Sed
bioinformaticsfasta
我想根据参考文本文件中的信息更改我的FASTA标题。假设我有两个文件:
file1.txt(参考,制表符分隔)
file2.fasta
>chr1:100-1000(+)
TTTTGAGAGGACTTCTCTGAGAGCTATGCTAGTCATCGAGGGGAAA
>chr2:30-400(-)
GGGGGGAGAGAGATCTCTGAGCTAGTCATCGTAGCTAGTCATGGGG
>chr3:50-4500(+)
ATGCGCGAGCGAGCGCGACGATCATCGT
我正在学习shell脚本在线课程,因为我的工作要求我学习shell脚本
我遇到了“awk”和“nawk”命令,但我的学习还没有达到这个要求
简而言之,我知道awk/nawk会搜索特定的模式,并在找到匹配的情况下执行操作
尽管如此,我还是不明白下面这句话的意思:
eval $( cat ${MMORPHYDIR}/${PWFILE} | nawk ' /^#BEGIN '${ENV_NAME}'/,/^#END '${ENV_NAME}'/ { print }' | egrep "${USEFUL
对于这样一个基本的问题,我深表歉意,但我正试图用awk计算文本文件中的空行数。这不是家庭作业。视窗10。Gawk 4.1.3
BEGIN { x=0 }
/^$/ { x=x+1 }
END { print "I found " x " blank lines." }
输出总是:我发现0个空行
谢谢。该命令应该可以工作,但您可以跳过x的初始化awk将自动为您执行此操作。您可以使用NF变量进行该检查,如果该变量为0,其计算结果为false,则该行为空。此外,我建议使用printf:
!
好的,我需要用我的两个文本文件来做这个。
我需要像这样合并这两个文件
文件1和文件2需要变成文件3
文件1:
ABC:123
TUV:678
QRS:456
文件2:
123:XXX
678:EEE
456:DDD
文件3:
ABC:123:XXX
TUV:678:EEE
QRS:456:DDD
如上所示,第二项在文件1和文件2中都是通用的。我只需要合并文件1和文件2中具有公共项的所有项,就像它们在文件3中一样。我更喜欢使用grep、sed、cut等。使用GNU coreutilssort
input.txt:
>block1
111111111111111111111
>block2
222222222222222222222
>block3
333333333333333333333
AWK命令:
awk '/>block2.*>/' input.txt
预期产量
222222222222222222222
然而,AWK什么也没有返回。我误解了什么
谢谢 如果要打印包含>block2的行之后的行,则可以使用:
awk '/^>block
我希望这不是一个太天真的问题。我有一组文件,其中有一组以分号分隔的项目,其中一些是数字。例如:
A;B;4.564;C;D;E;5.698;F;G;H;7.893
等等
在这些文件中,数字可能略有不同,例如,上面示例中的5.698在其他文件中可能是5.691或5.703等。所以,我设置了一个搜索范围,比如从5.685到5.710。在awk one liner实际执行此搜索之前,代码都很好,但我被困在那里了。以下是awk代码:
awk -v low=$NUM3 -v high=$NUM2 '{i
它可能会使用头来转换此文件
name,lastname,tall,age
peter,rick,1.8,24
dany,beck,1.7,25
paty,lisp,1.4,45
姓名、姓氏、身高、年龄
彼得,里克,1.8,24
丹尼,贝克,1.7,25
帕蒂,lisp,1.4,45
对此
name:name,lastname:lastname,tall:tall,age:age
name:peter,lastname:rick,tall:1.8,age:24
name:dany,lastname
如果用于执行计算的文件中包含数据,则下面的awk工作正常。如果文件为空或0KB,则输出不正确。我试图在bwlow中设置一个条件,该条件将检查file是否为空,如果file不为空,则输出保持不变,但如果file为空,则输出将重新格式化为所需的4个零的输出,制表符分隔。我尝试在下面的#检查是否为空。谢谢:)
awk
awk '
# print from stored values
function prt(){
print p1 ":" (p6start==1 ? p2 : p2+p
当你仔细审视我过去几周提出的问题时,你会发现我提出了与此类似的问题。因为我不知道我的问题是从哪里来的,所以我很难按要求的格式提问。莫顿告诉我不要使用范围表达式。嗯,我不知道他们到底是什么。我在这个论坛上发现了许多与我类似的问题,并给出了有效的答案
例如:“如何从匹配中打印以下行”()
但当我处理多个输入文件时,我找到的所有解决方案都会停止工作。我需要处理很多问题。
我使用以下命令:
gawk -f 1.awk print*.csv > new.txt
而1.awk包含:
BEGI
我需要计算ns2中的平均数据包传输速度。我必须在awk程序中编写这个公式。但是我不知道怎么做。
n是接收到的数据包数,s是数据包传输时的距离。任何答案都会很有帮助。谢谢。函数topla(数组){sum=0;for(数组中的i){sum=sum+250/数组[i];}返回sum;}
function topla( array ) {sum=0; for (i in array) {sum=sum+250/array[i];}return sum;}
BEGIN {
total_packets_s
我想写一个awk脚本,这样
我可以直接在bash中运行脚本名,而无需将awk作为命令名
如何安排输入文件名和其他参数在命令行中指定并传递到脚本中
脚本应该以shebang开头,比如说myscript.awk:
#! /usr/bin/awk -f
下面的Awk代码在两种模式/^[+]{3}/和/^$/之间分割出文件grep-diff.log。用空格删除中间的换行符
这是可行的,但最近它开始挂起,我无法调试它
任何关于如何更有效地做到这一点的提示或技巧都将受到欢迎
awk -v g=0 '{if ($0 ~ /^[+]{3}/) {chunk=$0 }
else if ($0 ~ /^$/) {chunkAry[g]=chunk; chunk=""; g+=1}
else {chunk=chunk " &quo
我正在尝试使用awk提取并打印NM\u的第一次出现以及NP\u之后的部分,从p开始。打印的是:,而不是每个字符的“|”。输入文件是制表符删除的,但输出不需要删除。下面的命令确实执行,但打印文件中的所有行,而不仅仅是模式。在我5000多行的实际数据中,可能存在多个NM或NP,但仅提取并打印每个行的第一次出现。关于RSTART和RLENGHTH的概念,我仍然有点不清楚,但是,使用第1行作为输入的示例:
NM变量应为NM\u 020469.2
NP变量将是:p.Gly268Arg
我也加入了评论。谢谢
我的文件:
不需要的输出:
1 Cufflinks exon 162752 163607 . + . gene_id "XLOC_000001"; transcript_id "TCONS_00000001"; exon_number "1"; oId "CUFF.1.1"; class_code "u"; tss_id "TSS1";
1 Cufflinks exon 17719
如何将file.txt拆分为子文件,其中每个文件在file.txt中的连续外观为XX?例如,将以XX开头的行打印到file1.txt中,如果下一行不是XX,则关闭file1.txt并打开file2.txt以获得XX的下一个外观
输入文件:file.txt
some header information
XX 123 456 abc
XX 234 567 def
XX 456 345 ghi
END
XX 345 654 ijk
XX 567 789 klm
XX 678 asd mno
XX 5
我有一个巨大的CSV文件,里面有数百万行不同的内容,每行的格式如下:
/resource/example
现在我还有一个.TTL文件,其中每一行可能都有完全相同的文本。现在,我想将包含与当前CSV文件相同文本的.TTL文件中的每一行提取到一个新的CSV文件中
我认为这是可能的使用grep,但这是一个linux命令,我非常,非常缺乏经验。可以在Windows中执行此操作吗?我可以编写一个Python脚本来比较这两个文件,但由于这两个文件都包含数百万行代码,因此我认为执行这两个文件实际上需要几天的
我有一个以空格分隔的大文件,其中有数千行和数千列。如果一行中的计数小于5,我想将值转换为N.A
输入:
CHROM 108 139 159 265 350 450 461 559 765 850
SNP1 0 0 0 0 0 0 2 2 2 2
SNP2 2 2 2 2 2 0 0 0 0 0
SNP3 -1 -1 -1 -1 0 0 0 0 0 0
SNP4 0
我正试图从file1输入file2,这样file2中的每一行都是每一file1行的第一个字段,后跟一个空格和当前时间
例如
变成
IN-X_4096_20140802_121306_007 14:24:32
IN-X_4096_20140802_133431_012 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-A_6046_20130613_165426 14:24:32
IN-X_4096_20140802_133431_014 14:24:3
我想传递一个预定义变量作为awk脚本的列号。我已经去掉了不必要的部分,下面是我想做的一个例子。下面是我到目前为止尝试的部分内容
原因:这是一个半长的脚本,目前可以运行,不过我想在脚本的早期定义列,因为这将使脚本在列更改时更容易更新
我希望将“state”变量传递给awk的列标识符,例如:
#/bin/bash
导出状态=“$6”
cat~/file | awk-v列=“$state””状态=“失败”
运行上述代码会生成列6确实为“FAILED”的行,因此一定是出了什么问题。而awk'$6=“失
这里我想用bc-l或awk来解一个公式
我有一些固定编号,我可以定义如下:
A=5.8506
B=200.26323
C=151.3219
D=11.9275
E=0 and 5
我想用下面的数学公式得到答案:
Ei={(B)*(C/(E*D+C))^(1/D)}^(1/3)
根据我的公式,E=0的答案应该是5.7965,E=5的答案应该是5.7965
请给我一个简单的方法来得到上述数学公式的答案。我没有找到任何代码,如果它已经可用
我所尝试的:
a=$(echo "$E*$D | bc -
对于我想要打印的内容,我有几个条件(跳过我想打印的部分中包含的hello,从\k{f}打印到\l{k},从\word{g}打印到\word2{g},打印行开始\hello2,打印\b和\bf之间的部分-有一个问题:in\bf}是不应该打印的部分):
我想为\bf添加一个条件,即它应该在行中单独存在。请问怎么做
file.txt:
text
text
\hello2
456
565
\word{g}
s
\hello
\word2{g}
\k{f}
fdsfd
fgs
\l{f}
text
\b
这是一个示例文件。我想打印第2列中的数字在两个shell变量定义的范围内的行
Test 198 A 0
Test 199 A 2
Test 2 A 0
Test 202 A 22
Test 122859 G 199
Test 198589 A 0
例如,如果$start=198和$end=202,我只需要这些行:
Test 198 A 0
Test 1
我有这样的文件
d
e
e
s
k
a
b
c
d
dee
sk
abcd
dee
sk
abcd
我只需要像这样转换
d
e
e
s
k
a
b
c
d
dee
sk
abcd
dee
sk
abcd
为此,我使用了awk和xargs
xargs < file|awk '{ gsub (" ", "", $0); print}'
xargs
我在这样一个非常大的文件中搜索这个字符串,不知道新行从哪个位置开始。我的第一个想法是删除所有\n,但是文件超过了3 gb。。。我认为有一个聪明的方法可以做到这一点(sed,awk,…)
假设搜索字符串不能扩展到2行以上,则可以使用此awk:
awk -v p="ABCDEFGH" 's $0 ~ p {print NR,s $0} {s=$0}' file
或者,您可以将每一行粘贴到下一行,并grep结果。这样,您必须创建一个文件,其大小是大输入的两倍
tail -n +
我正在尝试分析具有以下结构的文件:
AAAAA
123
456
789
AAAAA
555
777
999
777
其思想是检测“AAAAA”模式并提取以下两行。完成此操作后,我想附加下一个“AAAAA”模式和以下两行,因此最后一个文件将如下所示:
AAAAA
123
456
AAAA
555
777
考虑到最后一个不会以“AAAAA”模式结束
你知道怎么做吗?我使用过sed,但我不知道如何选择模式后要保留的行数
AWK的Fo示例:
awk '/'$AAAAA'/,/'$AAAAA'/'
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 146 页