我有一个以制表符分隔的文本文件,有8列:
Erythropoietin Receptor Integrin Beta 4 11.7 9.7 164 195 19 3.2
Erythropoietin Receptor Receptor Tyrosine Phosphatase F 10.8 2.6 97 107 15 3.2
Erythropoietin Receptor Leukemia Inhibitory Factor Receptor 12.0 3.6 171 4
我有一个文件:
jeden
dwa
jeden
trzy
trzy
cztery
piec
jeden
此命令打印出:
$ awk 'BEGIN {while ((getline < "file") > 0) if(a[$0]++) print }'
jeden
trzy
jeden
编辑:
我找到了一个有效的例子
awk '{if (x[$1]) { x_count[$1]++; print $0; if (x_count[$1] == 1) { print x[$1] } }
我很难确定当前行号是否大于下一行,然后它应该打印类似于“数字53大于23”的内容,然后比较下两行“数字54小于76”。我在想NR%2的事情,但不确定之后该怎么办。任何关于如何完成这项工作的提示或建议都将不胜感激
此文件的一个示例是:
53
23
54
76
12
42
预期结果
the number 53 is greater than 23
the number 54 is less than 76
the number 12 is less than 42
这就是你想要的:
awk '
我对awk处理简单的事情有问题。
但对我来说并不简单明了。
这就是我需要解析的内容:
$ cat file
/dir1/dir11/file1
/dir10/dir103/file2
/dir2/dir21/dir221/file3
我想要的是,有单独的文件路径(没有文件名),比如:
我已经试过了:
$ cat file | awk -F"/" '{for (i=1;i<NF;i++) print $i}'
dir1
dir11
dir10
dir103
dir2
dir21
di
我正在努力实现以下目标,但我对编程这个话题完全陌生,而且我越来越疯狂。我见过许多例子,其中解释了如何求一列或几列的和,但从未解释过如何从同一行添加值。我试着用awk命令做一些事情,但完全没有用
我有以下意见:
10000 4.32078125e-05 2.319742728e-05 -1.626118465e-06 2.116442767e-05 2.824876608e-06 -2.008498137e-07 1.378852315e-11 -2.461344776e-11 -1.1853
我有一个脚本,它读取一个带分隔符的文件,并为每个记录将文件中的第三个元素相加。对于大多数数据文件,除一个文件外,其他文件都可以正常工作。我有一个数据文件,数据文件中有193条记录。我希望从脚本中获得2028219.43。取而代之的是,我得到了一个指数,它似乎已经被四舍五入了。起初,我认为使用printf可以得到数字,但如果数字已经四舍五入,那么它就不会返回我所期望的结果
这是我用来读取分隔数据文件的代码。每条记录中的数据由*
export clm_total=$( awk -F* '{f1+=$
嗨,我有一个文件,看起来像这样:
AAAA 5
BBBB 4
CCCC 12
...
AAAA 5 0.2380
BBBB 4 0.1904
CCCC 12 0.5714
(文件以制表符分隔,有1000多行)
我感兴趣的是对第二列值求和,这是直截了当的:
awk '{sum +=$2}END{print sum}'
对于这3行,其值为21。我要做的是首先对文件中的所有第二列求和,然后打印col1,col2,col2/sum。因此,输出将如下所示:
AAAA 5
BBBB 4
CC
我希望搜索一个文件并从两个字符串之间提取数据。我可以用sed确定这一点。但我也需要它来只提取特定领域的信息。例如:
2015-04-29T08:05:24.668345-04:00 test1 [S=4444] [SID:1630710955] HOOK_EV
---SYSLOG DATA
2015-04-29T08:05:24.668345-04:00 test1 [S=4445] [SID:1630710956]
2015-04-29T08:05:24.668345-04:00 test1
我有30个文件,叫做UE1.dat,UE2.dat。。。。每列中有4列。下面给出了UE1.dat和UE2.dat的柱结构示例
UE1.dat
1 4 2 1
2 2 3 3
3 2 4 4
4 4 4 2
UE2.dat
2 6 8 7
4 4 9 6
7 1 1 2
9 3 3 3
因此,我尝试了以下代码:
for((i=1;i UE_all.dat
要仅从每个文件中获取第一列并将其写入单个文件和并排的列,下面给出了所需的输出
1 2
2 4
3 7
4 9
但不幸的是,
几天前我开始学习awk编程(有效的awk脚本)。在第102页,作者解释了字段宽度,但我不明白它是如何工作的。请有人能给我解释一下fieldwidths是如何工作的吗
字段宽度以空格分隔的字段宽度列表。设定时,
gawk将输入解析为固定宽度的字段,而不是使用
FS变量的值作为字段分隔符
我认为最好用一个例子来解释它是如何工作的:
$ echo "aaabbbbcccccdddddd"|awk -v FIELDWIDTHS="3 4 5 6" '{for(i=1;i<=NF;i++)print
dokku ls显示了以下内容,但如何使用awk获取app-1470418443的状态
因此,magic命令返回running
-----> App Name Container Type Container Id Status
app-1470418443 web 78a092d176f1 r
我有两个文件file1.txt和file2.txt
file1.txt
DS496218 40654 42783
DS496218 40654 42783
DS496218 40654 42783
file2.txt
###
DS496108 ena gene 99942 102567 . -
DS496128 ena mRNA 99942 102567 . -
DS496118
标签: Awk
calculated-columnsmultiplication
如何使用awk进行以下操作
两个输入文件data.txt和keys.txt:
data.txt包含一些数据:
A;1
B;2
A;3
keys.txt包含“key;value”对(“在本例中,C”不是data.txt的一部分,但awk脚本仍应工作):
输出应如下所示:
A;1;30
B;2;20
A;3;30
因此,data.txt中包含keys.txt中任何键的每一行都应获得附加到data.txt中该行的相应值。awk解决方案:
awk -F';' 'NR==FNR{a[$1]=$2; n
我的脚本输出一个包含价格(col$3)的杂货清单(col$1)
然后按类别(第2列)将它们合并,并添加每个类别的成本
问题是,当我运行for循环时,它总是只会弄乱原始杂货清单输出的第一行。
我试着用不同的开头和结尾来分开它们,但没有用
这是我当前的代码,带有子类别的循环被注释掉了
#!/bin/awk
BEGIN { FS="\t+"; OFS=" "; printf("%-30s %s\n", "Item","Cost")
printf("%-30s %s\n", "====
我试图求第2列中的某些数字的和,这与我的代码是一致的。但我还想计算第2列中相同值的重复次数,并在最后一列中打印
file1
36 2605 1 2
36 2605 1 2
36 2603 1 2
36 2605 1 2
36 2605 1 2
36 2605 1 2
36 2606 1 2
所需输出
2603 36 1 2 1
2605 180 5 10 5
2606 36 1 2 1
awk '{a[$2]+=$1}{b[$2]+=$3}{c[$2]+=$4;coun
我们使用oracle的sqlldr加载由第三方创建的数据文件。数据文件大小不同,有些文件非常大
数据文件的字段由分隔符分隔|
示例:字段1 |字段2 |字段3 |字段4 |字段5
字段3可以是:
空的
单值
值1 |值2 |值3
如果字段3包含|,我需要用引号将其括起来
我已经制作了一个shell脚本来实现这一点,但是它有点慢——处理一个47000000行的文件大约需要16分钟
我想用awk来做,但我对语法不太熟悉,而且最后期限不允许学习/开发/调试
在awk中是否会明显更快
有简单的方法吗
感
我有一个数据文件,其中有些行有15列,而有些行有9列。我需要把这个文件分成两个文件。一个文件包含9列的行,另一个文件包含15列的行。有人能帮我做这件事吗。我尝试了一些“awk”命令,但没有成功。我在这里附上了我的数据文件的图像。没有查看您的数据
awk'{print>(文件名“.NF”)填充
将创建两个新文件,infle.9和infle.15(如果有不同字段数的记录,则创建更多文件)
FILENAME是一个包含当前文件名的awk内置变量
NF是一个awk内置变量,保存当前记录中的字段数
aw
我正在编写一个awk脚本,它将获取grep的输出并将其很好地格式化为HTML表。分隔符是“:”字符;我遇到的问题是,这个字符也可以出现在文本中。因此,如果我只是分别使用$1、$2和$3作为文件名、行号和注释,那么在注释中,在第一个之后我会丢失任何东西
有没有一种方法可以说$1、$2,然后是$3..NR,而不显式地在列上循环并将它们连接在一起
以下是目前为止的脚本:
`
开始{FS=“:”OFS=“:”}
{name=$1;number=$2;$1=“”;$2=“”;comment=substr(
是否可以为awk指定二进制分隔符字段FS
我有一个带有ascii数据字段的数据文件,但由二进制分隔符0x1分隔
#!/bin/awk -f
BEGIN { FS = "\x01" }
/FIELD/ { print $1 }
如果它是字符'1',它将如下所示:
awk -F1 '/FIELD/ { print $1 }'
或以脚本形式:
#!/bin/awk -f
BEGIN { FS = "1" }
/FIELD/ { print $1 }
如何将FS/F指定为0x1
#!/bi
我有一个需要在服务器上“重播”的日志文件
它包含如下条目:
Request:
query: EXEC prc_insert_customer
@param0: 110040851
@param1: 137463
@param2: user@example.com
@param3: John
@param4: Smith
@param5: Some address
@pa
我有一个这样结构的文件(太大了)
A B C,D,E,F
第三列包含4个值(但可以是变量),用逗号分隔。我想把那个文件转换成
A B C
A B D
A B E
A B F
基本上是复制前两个并将第二个拆分为行
你知道如何在awk中这样做吗?$awk'{n=split($3,a,/,/);for(i=1;i)
$ awk '{n=split($3,a,/,/);for(i=1;i<=n;i++)print $1,$2,a[i]}' file
A B C
A B D
A B E
A B
我有一个问题不知道该怎么解决。
我有3列选项卡分隔的数据,例如:
abs nmod+n+n-commitment-n 349.200023
abs nmod+n+n-a-commitment-n 333.306429
abs into+ns-j+vn-pass-rb-divide-v 295.57316
abs nmod+n+ns-commitment-n 182.085018
abs nmod+n+n-pledge-n 149.927391
abs nmod+n+ns-reage
我似乎有几个这样的问题,我真的试图自己解决,但没有成功
我有两个数据文件;我想比较它们的第一个字段,并打印输出文件中第一个文件中匹配条目旁边的第二个文件中的行。维护文件1中的列表顺序很重要,包括不匹配的行。这些文件是以制表符分隔的值,但如果需要,我可以更改它们(尽管数据中使用逗号)
file1.txt
37600
39219
32887
01262
69241
00361
34180
42385
69245
file2.txt
37600 GEAR PUMP 1
32887
我有两个文件file1和file2。文件2中的某些名称不在文件1中。我想在文件1中添加这些名称
文件1
文件2
我想要的输出如下所示
anna 14/2 = 7.0
alex 23/6 = 3.8
benny 0/0 = 0
cathar 0/0 = 0
deffy 27/3 = 9.0
hobert 24/9 = 2.7
sam 0/0
我想比较F11.txt中的第二个字段和F22.txt中的第一个字段。然后,将匹配的案例打印为“可用”,将不匹配的案例打印为“未找到”
投入:
F11.txt
a,10,zzz
b,20,zzz
c,50,zzz
F22.txt
10,yyy
20,yyy
30,yyy
40,yyy
已经尝试了下面的命令
awk -F "," 'NR==FNR{a[$1]=$0;next}{print $0 "," (a[$2]?a[$2]:"NotFound") }' f22.txt f11.txt
获
我有一个包含100多个.gz文件的文件夹。我需要得到如下输出:
file name : Count
例如:
cde.gz:123456
test.gz:456896要计算当前目录中每个文件的行数,可以执行以下操作
wc -l *
以上内容将为存在的任何子目录生成警告。要避免这些警告,可以使用find命令,如:
find . -maxdepth 1 -type f -exec wc -l {} +
当然,以上内容将按原样计算文件中的行数。如果文件已压缩,并且需要其包含的未压缩文件的行数,则可
我有两个输入文件,如下所示
x、 文本
文件2y.txt
scaffold4557 hsal_OGSv3.3 gene 3097 4624 74.8 + . ID=HSAL10661-RA;Parent=HSAL10661;Name=HSAL10661-RA;Alias=Hsal_17580--XP_001599845.1_NASVI
C20775336 maker gene 1895 1962 .
我正在尝试格式化AWK的printf()函数的输出。更准确地说,我正在尝试打印一个包含很长行的矩阵,我想将它们包装起来,然后继续下一行。我想做的是用Fortran语言最好地说明。考虑下面的FORTRAN语句:
write(*,'(10I5)')(i,i=1,100)
输出将是1:100范围内的整数,打印成10个元素的行
在AWK中也可以这样做吗。我可以通过偏移索引并用“\n”打印到新行来完成此操作。问题是这是否可以像Fortran那样优雅地完成
谢谢
正如评论中所建议的那样,我想解释一下我的
这就是我正在做的
文本文件以逗号分隔,有三个字段,
我想提取包含相同第二个字段的所有行
三次以上
文本文件(文件名为“Text”):
我的命令如下。用每行的第二个字段在awk和grep中键入整个文本文件,并计算行号。
如果行数大于2,则打印整行
命令:
awk -F "," '{ "cat text | grep "$2 " | wc -l" | getline var; if ( 2 < var ) print $0}' text
我的预期结果:
11,keyword1,content
我有一个包含5列的文件,我想使用数字范围作为标准来分隔列:示例:
chr1 2120987 2144159 NM_001282670 0.48106
chr1 2123333 2126214 NM_001256946 2.71647
chr1 4715104 4837854 NM_001042478 0
chr1 4715104 4843851 NM_018836 0
chr1 3728644 3773797
我正在尝试写一个awk脚本。部分代码需要计算$10(在其256以下的代码中)是某个值的次数。
可能性是4、8、16、32、64、128、256
每次出现这些值中的一个时,我都希望相应的变量递增一
我的代码块是
{
if ($10 == "4") {bs_4k++}
else if ($10 == "8") {bs_8k++}
if ($10 == "16") {bs_16k++}
if ($10 == "32") {bs_32k++}
if ($10 == "64") {bs_64k++}
i
我正在尝试使用awk查找file2中$2和file1中$3之间的所有$3值。如果file2的$3中的值在file1字段之间,则它将与file1中的$6值一起打印。file1和file2都是制表符分隔的以及所需的输出。如果没有要打印的内容,则处理下一行。下面的awk很接近,但使用我的实际~30MB文件,它处理速度很慢,并以意外的格式打印。我也不知道如何调整。谢谢:)
file1
chr1 948953 948956 chr1:948953-948956 . ISG15
chr1
我有一个类似于AS | REQ | XYZ | value=12的字符串,我正在用它拆分:
awk -F\| 'print {$4}' | awk -F"=" '{print $2}'
这将给出值12
但是对于字符串DF | REG | EXP | value=,它返回为空
如果字符串在第四列中遇到值且为空,则抛出错误。这可以在awk命令中完成吗
谢谢也许是这样的吧
awk -F\| '{print $4}' | awk -F"=" '{if ($2 == "") print "ERROR:
我试图从命令输出中去掉我不需要的信息,这样我就可以为linux构建一个简单的CDP客户机。现在,我正在使用grep过滤tshark的结果。我正在运行的命令是:
tshark-i enp0s25-a持续时间:30-V-f“以太主机01:00:0c:cc:cc:cc”-c2 | grep-e“IP地址”-e“设备ID:”-e“软件版本:Cisco IOS软件”-e“端口ID:”-e“VTP管理域:”-e“本机VLAN:-e”语音VLAN:“-e”双工:“-e”可用电源:
我得到的结果目前采用以下格式
当n为正数时,下面的命令用于获取模式匹配后的第n行
但是,当我将n作为负数时,同样的命令不适用于获取模式匹配前的第n行。你能帮忙吗
awk /pattern_to_match/{x = NR + n}NR == x file_to_search
谢谢,
BSD类似的东西可能会有所帮助
tac file_to_search | awk '/pattern_to_match/{x = NR + n}NR == x'
或
示例:
$ seq 10
1
2
3
4
5
6
7
8
9
10
$ s
我正在尝试使用c-shell(恐怕没有其他选项)和SED来解决这个问题。给出此示例文件,其中包含所有失败测试的报告:
============
test_085
============
- Signature code: F2B0C
- Failure reason: timeout
- Error: test has timed out
============
test_102
============
- Signature code: B4B4A
- Failure reason:
我有以下文件:
2 some
5 some
8 some
10 thing
15 thing
19 thing
现在我想以条目结束,其中“some”2,5,8对应于有1的行,其他的都是0。有多少行并不重要。这意味着“某些人”:
至于“东西”
使用awk可以快速实现这一点吗?我的意思是说:
awk '{for(i=1;i<=10;i++) entries[$i]=0 for(f=0;<=NF;f++) entries[$f]=1
我需要拆分一个包含多个列的文件,如下所示:
TCONS_00000001 q1:Ovary1.13|Ovary1.13.1|100|32.599877 q2:Ovary2.16|Ovary2.16.1|100|88.36
TCONS_00000002 q1:Ovary1.19|Ovary1.19.1|100|12.876644 q2:Ovary2.15|Ovary2.15.1|100|365.44
TCONS_00000003 q1:Ova
所以,是的,我正在尝试将包含电子邮件的文件1与包含电子邮件冒号地址的文件2进行匹配,我该怎么做呢
已尝试awk'FNR==NR{a[$1]=$0;下一步}{print a[$1]$0}'但我知道我做错了什么
文件1:
email@email.email
email@test.test
test@email.email
文件2:
email@email.email:addressotest
email@test.club:clubbingson
test@email.email:addresso
我想计算文件M列最后N行的平均值。我发现最好的解决方案是使用tail获取最后的N行,并将其输送到awk。对于我的情况,N=200和M=2。生成的命令将是:
tail -n 200 -f filename.asc | awk '{ total += $2 } END { print total/NR }'
然而,我没有得到任何结果。事实上,终端不会返回。我分别尝试了tail,它很好地输出了最后200行,但与awk组合使用时不起作用
我还尝试使用unbuffer(在tail之前)作为建议的解决方案
下面有我想用awk的grep替换的i3grep命令。所以我试过了
! /000000000000/;
! /000000000000/ $0;
! /000000000000/ $3;
在这里我没有得到一个错误,但是使用下面的脚本和
$ echo 000000000000 | awk '{ ! /000000000000/; print }'
000000000000
它没有像预期的那样跳过这些行
问题
有人能解释为什么我的“非grep”在awk中不起作用吗
grep -v '^#' $ho
我们有一个如下的源文件(“source-a”)(如果您看到蓝色文本,它来自stackoverflow,而不是文本文件):
“source-A”中的每个句子都有自己的一行,并以换行符(\n)结尾
我们有一个字典/转换文件(“converse-B”),如下所示:
aluminium<tab>aluminum
analyse<tab>analyze
white spirit<tab>mineral spirits
stag night<tab>bache
当Tcl中的awk命令在终端中运行而不是在Tcl脚本中运行时,我无法从该命令中读取字段
尝试进行语法更改,但它在终端而不是脚本中工作
set a { A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
#store only cell var in file
exec grep -in "cell (?*" ./slow.lib | cut -d "(" -f2 | cut -d ")" -f1 > cells.txt
#take
我得到了两个文件,希望使用awk将文件的一列中的子字符串替换为另一个文件中的字符串
f1:
1a1 aaa 777
3_3 ccc 6b6
3.3 ddd 666
f2:
b5g9aaa8y
5_6ccc9.
output:
1a1 b5g9aaa8y 777
3_3 5_6ccc9. 6b6
我想我可以在两个步骤内做到这一点:
生成子字符串和字符串的交集dict文件
使用awk(接头)来完成它
但是,是否有一行awk命令来检查字符串中是否有子字符串,然后进行替换
#
对不起,我应该解释得
我有一个包含字母数字数据的CFD输出文件。我的目标是提取某些具有数字数据的行,以便能够绘制。我能够使用grep提取以数值开头的数据。但是,这些提取数据的某些行以数字开头,但也包含我不想要的字母。这是一个样本
3185 interface metric data, zone 1444, binary.
33268 interface metric data, zone 1440, binary.
3d, double precision, pressure-based
我需要一些帮助我有一个文件,其中每个列上都有主机IP和端口,因此该文件如下所示
Timestamp: 1573678793 Host: 192.168.0.1 Ports: 80/open/tcp/
Timestamp: 1574833457 Host: 192.168.0.1 Ports: 443/open/tcp/
Timestamp: 1574833457 Host: 192.168.0.2 Ports: 80/open/tcp/
Timestamp: 1574833457 Host: 1
我正在尝试将以下输出的列仅第一个和第三个列导入linux终端。我该怎么做
我的实际产出:
akamai-1576314300-xhf78 0/1 Completed 0 5d4h
我正在尝试使用sed将publisher和isbn值合并到title标签中。但是我在这里找不到任何符合我要求的例子。示例如下
由此
<book>
<title>The Big Book of Silly Jokes for Kids</title>
<publisher>Rockridge Press</publisher>
<isbn>ISBN-10</isbn>
</book>
给
标签: Awk
numberscomparemultiple-columns
嗨,我不知道如何实现给定的预期输出
输入文件,给出输出的当前代码,但必须是预期的
input file awk code output
--------
3700 TEXT_0A 34 NA NA | 3700 TEXT_0A 34 NA NA 850
3721 TEXT_0A 55 ete 851 | 3721 TEXT_0A 55 ete 851 850
3701 TEXT_0A 100 N
在第一列中有一个从5.0到12的值(每行增量为.5),我称之为set,在每行的from中有5列带有值
目的是为了找到每个集合(5.0到12.0),将所有集合的2列添加到单个集合中,并添加到相同的案例中,直到文件结束
因此,输出将是4列的组(1列+3组中的3列)
输入文件
5.0 0 0 0 128 128
5.5 3 69 18 128 128
6.0 2 79 12 63 15
6.5 -1 75 11 28 24
7.0 0
上一页 1 2 3 4 5 6 7 8 9 ...
下一页 最后一页 共 146 页