我不能解决一个很简单的问题。我的数据文件如下所示:
Crap Crap 0.123456789D+09 Crap Crap
Crap Crap 0.123456798D+09 Crap Crap
我需要使用AWK来减去第三列中的数字;第二行减去第一行
我试过:
cat crap.txt | awk '{ A[NR-1] = $3 } END { print A[1] - A[0] }'
没有成功。也许号码的格式不对?(AWK能用D而不是E阅读科学符号吗?)
救命啊
编辑:
正如社区所知,AW
我怎样才能得到所有的差异,而不仅仅是一个?我想使用第三列中每个项目的计算结果。困境在于,如果我删除END,我可以打印$3,但不能打印ave。如果我离开END我有ave但不是所有的差异
awk '{sum+=$3} END {ave=sum/NR} END {print $3-ave}' coriolis_data
-0.00964 // I want to see the rest differences, how?
科里奥利大学数据
.105 0.005 0.9766 0.0
在DDoS之后对大型日志文件执行AWK时,我试图获得更具dtrace风格的分发输出,以便更容易读取输出:
# tail -1000 access_log | awk '{ print $1 }' | sort | uniq -c | sort -nr | awk '{printf("\n%s ",$0) ; for (i = 0; i<$1 ; i++) {printf("*")};}'
43 192.168.0.1 *********************************
我想在awk或cut命令中输入一个字符串名(即“COL2”),并打印与该列标题字符串匹配的列
数据文件如下所示:
COL1 COL2 COL3 COL4 COL5 COL6
a a b d c f
a d g h e f
c v a s g a
XXXXX YYYYY ZZZZZ
如果我通过COL3,我希望它打印第三列,等等。我想awk可能是最容易使用的东西,但是cut也可能有用。我只是不知道该怎么做。当你对awk说“传递字符串”时,我想你应该在命令行上给出字符串。一个选项是使用-v功能定
标签: Awk
backticksevaluate
问题是:我有不同的txt文件,其中注册了到达服务器的每个恶意软件包的时间戳和ip地址。我想做的是创建另一个txt文件,显示每个ip的恶意软件包第一次到达的时间
一般来说,我想做这样的事情:
for every line in file.txt
if (ip is not present in list.txt)
copy timestamp and ip in list.txt
我用awk来做这件事。主要问题是“如果list.txt中不存在ip”。
我正在这样做:
{ a=$(
我试图在$NF之前打印参数。然而,$NF--并不能起作用。解决这个问题的办法是什么?问题是,我不知道我得到了多少arg,所以我总是需要$NF和arg
问候
尤尔根
host -t ptr 1.1.1.1 | awk '/pointer/ {num=split($0,a, "."); print a[num-2] "." a[num-1] ;}'
foo.tld
您可以使用$(NF-1)获取倒数第二个字段。因此,在你的情况下:
awk '{print $(NF - 1), $NF}'
啊哈,
在AWK中,是否可以指定字段的“范围”
例如。给定一个标签分隔的文件“foo”,每行有100个字段,我只想为每行打印字段32到57,并将结果保存在文件“bar”中。我现在做的是:
awk 'BEGIN{OFS="\t"}{print $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57}' fo
我的文本文件被细分为块,看起来像这样:
foo:a
酒吧:b
蝙蝠:c
foo:d
酒吧:e
蝙蝠:f
是否有一种方法可以单独编辑每个块(即为块运行一组规则,然后移动到下一个块)?
结果应该如下所示:
foo:ab
酒吧:BC
蝙蝠:c
foo:de
酒吧:EF
蝙蝠:f
我不知道如何使用适用于整个文件的规则来实现这一点。这对您有用吗
awk -v RS="" -F'\n' '{for(i=1;i<=NF-1;i++){split($(i+1),x," ");$i=$i" "x[2];
我在控制台上很好地使用了下面的行,但是当我在makefile中使用它时,我得到了下面的错误。在过去的一个小时里,我尝试了不同的事情,没有任何帮助。我还必须在makefile中的命令之前使用“@”,这只是正常情况。欢迎任何帮助
控制台命令
cpio -itv < rootfs.cpio | awk '!/^d/{$8="";print}' | sort -k8 > rootfs.layout.trim
在makefile中
log-rootfs:
# copy the layout
我有一个包含一些信息的文本的文件,它的结构与下面的类似。
注:请假定------为不需要的文本。这是我不喜欢的其他信息
==== Start of Info for Employee 1 ====
--------
--------
--------
Start of Address information for employee 1
Street No
City
Zip
End of Address information
-------
-------
==== Start of Info
我有下面的脚本,它计算特定列的和。我现在也在尝试获取记录的数量。无论我尝试什么组合,它都会给我一个语法错误。我试图获得传递给下面一个变量tr的记录数
BEGIN { FS="\t" }
{ sum[FILENAME] += $42 }
{tr=NR}
END {
for (i=1;i<ARGC;i++)
printf "%s %15d\n", ARGV[i],sum[ARGV[i]],tr>> "output.abc"
}
BEGIN{FS=“\t”}
我尝试了以下命令
ls | awk '{ sub(/.cpp/, " ", $0); print($0); }'
结果
awk: syntax error near line 1
awk: illegal statement near line 1
每当您收到错误消息时,请帮助我查找错误:
awk: syntax error near line 1
awk: illegal statement near line 1
这意味着你正在跑步。很遗憾,在Solaris上,这是默认的/bin/aw
我有一个298行2列的文件(file1)。我有48个不同长度(2-298行)的其他文件,其中有6列,其中第1列和第2列与file1相同。我想通过粘贴文件2-50中第4列的数据来追加文件1,仅当两列都与文件1匹配时,这样最终追加的文件将包含文件1中的第1列和第2列,以及文件2-50中接下来的48列(一个有50列的298行文件)。如果在文件2-50中找不到值,我需要NA
文件1:
1 1234
1 48687
2 1234
2 987365
3 97857
文件2:
1 1
如何计算所有单独列(115列)的总和
Input.txt
1st,2nd,3rd,4th,5th,Till-115thColumn
51,34,27,67,88,99
56,39,32,72,93,104
66,49,42,82,103,114
Output.txt
1st,2nd,3rd,4th,5th,Till-115thColumn
173,122,101,221,284,317
我试过这个命令:
awk -F"," 'BEGIN {sum=0; OFS=","} {for (i=1
我有两个文件
文件1:
alfa numbers numbers
vita numbers numbers
gama numbers numbers
delta numbers numbers
epsilon numbers numbers
zita numbers numbers
...
文件2:
'zita' keepnumbers keepnumbers keepnumbers
'gama' keepnumbers keepnumbers kee
awk能否仅用于提取具有不同属性的连续行(在本例中为20行)
第3列中的字符(从C到H13)和第5列中的字符构成文件
结构如下:
徖
LINE 564 C LESS L3782 246.617 200.380 10.086 1.00 0.00 L
LINE 565 C1 LESS L3782 247.525 201.163 9.136 1.00 0.00 L
LINE 566 C2 LESS L
要计算两个日期之间的天数,对于下面的示例,天数==$6-$4位置
Input.txt
Desc1,Desc2,Desc3,DATE_ACTIVE,STATEMENT_DATE,Desc4
abc,def,ghi,21-MAR-08,01-JUL-14,jkl
abc,def,ghi,01-JUL-14,15-JUL-14,jkl
abc,def,ghi,06-NOV-06,08-JUL-14,jkl
abc,def,ghi,18-NOV-03,08-JUL-14,jkl
abc,def,ghi,
我希望它如下所示:
line1: 2
line1: 3
line1: 5
line2: 1
line2: 2
line3: 10
如何实现它?使用gawk的。一旦我破解了它,我会提供实际的代码
line1: 2, 3, 5
line2: 1, 2
lin23: 10
awk'{for(i=1;i使用perl
awk '{for (i = 1; i <= NF; i++) {
gsub(/[^[:alnum:]]/, " ");
arr[tolower($i)] = a
希望阅读第一行,然后打印$1、$3、$4作为第一行,然后打印$2、$3、$4作为第二行,依此类推
Input.txt
10,20,abc,def
70,40,xxx,yyy
30,50,mno,pqr
预期输出.txt
10,abc,def
20,abc,def
70,xxx,yyy
40,xxx,yyy
30,mno,pqr
50,mno,pqr
期待你的建议 使用awk的简单方法:只需打印您想要的内容,使用逗号作为输入/输出字段分隔符:
~$ awk 'BEGIN{FS=OFS=","}
我写了一个程序来实时分析日志文件。我需要用IPs来喂它。它可以与以下命令配合使用:
cat /var/log/apache2/access.log | awk '{print $1}' | ./my_program
tail -f /var/log/apache2/access.log | awk '{print $1}'
此外,我还可以通过以下命令实时获取IP:
cat /var/log/apache2/access.log | awk '{print $1}' | ./my_progra
如果regex后面的字段小于150,我想打印文件名。这是我想出的密码。但是,输出没有产生任何结果
awk '{for(i=1;i<=NF;i++){ if($i=='price' && $(i+1) < 150){print FILENAME} } }" files* > filenames
awk'{for(i=1;i您的命令中有一个输入错误(末尾缺少引号)。我确实这样更改了它:
awk '{for(i=1;i<=NF;i++){ if($i=="pr
我有一个包含300个文件的文件夹。如果$2您的脚本做得太多,我想从文件中删除行。在我看来,最干净的解决方案可以扭转这种状况:
awk '{ if ($2 > 25) print }'
甚至:
awk '$2 > 25'
gawk -i inplace '$2 > 25' file1 …
如果不想反转条件,则:
awk '{ if ($2 <= 25) next; print }'
甚至:
awk '$2 > 25'
gawk -i inplace '$2
嗨,所以基本上我有一个“临时”文本文件,我正在使用它有一个各种电子邮件地址的长列表(一些重复)。我试图输出的是按最高频率排列的电子邮件地址,然后是最后唯一电子邮件地址的总数
awk '{printf "%s %s\n", $2, $1} END {print "total "NR}' temp | sort -n | uniq -c -i
到目前为止,我得到了我想要的输出,除了它不是按最高频率排列的。相反,它是按字母顺序排列的
我已经被困在这几个小时了,不知道为什么。我知道我可能做错了什么,但
我想从文件中选择word并将其他行复制到下一行
意味着我有下面这样的mysql慢速查询。我想从中选择当前日期时间查询和直到下一个日期时间查询
请为同样的指南
# Time: **161205 10:27:39**
# localhost []
# Query_time: 5.517501 Lock_time: 0.034388 Rows_sent: 50 Rows_examined: 27061434
SET timestamp=1480913859;
SELECT ,NULL,NULL
我是awk的新手,我的命令如下。当没有行返回时,需要打印通过,否则打印失败。但是如果没有值,则无法显示通行证
egrep -v "^\+" /etc/passwd | awk -F: '($1!="root" && $1!="sync" && $1!="shutdown" && $1!="halt" && $3<500 && $7!="/sbin/nologin") {print}' | awk '{if(NR
有人能帮助理解如何解释/阅读此awk命令吗?
awk '/foo/{if (a ~ /abc/) print a; print} {a=$0}' file
对于有行的文件:
abc 0
def
abc 1
foo 1
ghi
jkl
foo 2
foo 3
mno
abc 2
foo 4
foo 5`
abc 1
foo 1
foo 2
foo 3
abc 2
foo 4
foo 5`
观察到命令将输出打印为:
abc 0
def
abc 1
foo 1
ghi
jkl
foo 2
foo
我有一个输入文件:
HEADER 1 | HEADER 2 | HEADER 3 | HEADER 3 | HEADER 4 |
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
1356438283301|1356438284971|1356438292151697|1356438284972|1356438292151693|
135643828
我的档案:
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool,True,junior,Detroit
Lara,True,Fool,senior,Miami
我想要的是:当有四个逗号而不是三个逗号时,删除行中的第二个逗号,如下所示:
Nicole,Foo,senior,Lexington
John,Doe,junior,Chicago
John,Fool True,junior,Detroit
Lara,True Foo
我有以下格式的文件中的数据:--
我想删除------之前和------之后的所有内容
要删除之前的所有内容,请使用以下sed
sed '/_id/,$!d' 1.txt
它删除_id之前的行,但不删除SQL>
类似地,我使用下面的sed删除------之后的所有内容,但它不会删除下面的行
sed 's/\------.*/------/' 1.txt
有人能帮我找出哪里做错了吗?我需要的是:--
使用sed
尝试:
工作原理:
-n
这告诉sed除非我们明确要求,否则不要打印
/\u i
我有一个包含100列数据的文件。我想打印99个独立文件中的第一列和第I列,我正在尝试使用
for i in {2..99}; do awk '{print $1" " $i }' input.txt > data${i}; done
但是我有错误
awk: illegal field $(), name "i"
input record number 1, file input.txt
source line number 1
如何在{print}中正确使用$i?如果您想完成您试图
我有这个档案
House.csv
M2018&03,HOUSE,BOX_X,16
M2018&03,HOUSE,FENCE_A,2
M2018&03,HOUSE,IRON_V + WINDOWS,1
M2018&03,HOUSE,DOOR + ROOF,7
M2018&03,HOUSE,TABLE + TV + LAPTOP,1
M2018&03,HOUSE,RADIO_A + RADIO_B + RADIO_C,3
M2018&03,HO
在awk中,我们可以用各种方式表达模式,例如。G作为包含在分隔符/…/中的正则表达式,或作为布尔表达式,其中非空值(字符串)或非零值(数字)为真。然而,我有这种模式,我想知道它有什么作用:
/test/p
它打印所有行,无论p将具有什么值,以及提供什么regexp。如何读取此模式?在文档中,我没有找到任何与此相关的内容。我希望出现一条错误消息,如结尾分隔符丢失。(我知道这是sed的常用表达式。)根据当前记录(行)是否与正则表达式匹配,/test/的计算结果为0或1
它是与变量p(可能是一个空字
我正在尝试使用这个命令-awk'match($0,“SubNetwork=XXXXX”){print substr($0,56,14)}file.txt
要获得以下输出:
10Chars Stringtogetwith14Char 10.10.10.76
15个字符YYYY另一个字符串14图表10.10.10.11
我正在考虑使用“=”作为第一次搜索的开始和结束,另一个“=”和“,”作为第二次搜索,第五次出现“@”作为第三次搜索模式的开始和结束
包含6000行的示例文件:
SubNetwork=
我有一个包含此格式日期的文件(每隔几天更改一次)
我需要的是在月/日中添加一个零,使其在个位数的月和日中看起来像这样
01/05/2016
我在网上发现了一个“sed”命令,但是它只在“/”之间的数字上加了一个零,而不是第一个数字。有什么建议吗
这是命令:
sed -e 'sx\([^0-9]\)\([0-9]/\)x\10\2xg' -e 'sx/\([0-9]/\)x/0\1xg' /path/to/your/file
就你做错了什么而言,你的第一个sed节只会在前面有一个非数字字符的日
了解更多关于awk的信息,但是我无法找到一种方法来将awk~模式中的特殊字符视为文本。例如,我有一个包含
C++ for dummies:test1:test2
java for dummies:test1:test2
bash for dummies:test1:test2
假设我希望用户能够根据第一个字段搜索匹配的模式,例如,输出将显示的假人中的用户类型
C++ for dummies:test1:test2
java for dummies:test1:test2
bash for du
我过去这样做没有问题,但这次不行,我不明白为什么
我的原始文件是
1002 10214
1002 10220
1002 10222
1002 10248
1002 10256
我需要创建一个新文件,合并上面的两列,并添加第二列,值为1
期望的输出应该如下所示
100210214 1
100210220 1
100210222 1
100210248 1
100210256 1
我尝试了下面的awk命令,
我有一个档案,有以下记录:
1 Error 19-03-23 02:02:26 LPU 6 : RX_PWR_L_ALARM of SFPF ALARM of
PIC1 is abnormal[OID:1.3.6.1.4.1.201
1.5.25.129.2.1.9,BasCode:67
我在第4列有一个日期值为YYYYMMDD格式的文本文件,在第5列有一个月偏移量
a1|b1|c1|20190101|1|1|11|A|D
a1|b1|c1|20190101|2|2|12|B|E
a1|b1|c1|20190101|3|3|13|C|F
a2|b2|c2|20190101|1|4|14|G|J
a2|b2|c2|20190101|2|5|15|H|K
a2|b2|c2|20190101|3|6|16|I|L
我想将第5列中的值替换为
日期-d'(第4列中的值)-(第5列中的值)
我想从包含如下内容的文件中打印/剪切字符串
I want to support CH: UTF-8 fully in my web application
I want to support CH: UTF-8 fully in my web application
I want to support UTF-8 fully in my web application
I want to support UTF-8 fully in my web CH:application
I want to
在第一列中,我需要对两个文件进行比较
文件1
文件2
首先,我需要测试File2中的col1值。如果File1中不存在col1 File2值,则删除该行。因此,在第一次操作之后,第二个文件应该如下所示:
第一次操作后的文件2:
User2, misc info, different stuff
User2, misc info, different stuff
User1, misc info, stuff
User3, misc info, more stuff
之后,我需要测试File1
我有一个文件,从第3列开始,其中的数字小于1。我想从1中减去这些数字。文件看起来像这样
q q 0.6 0.3 0.6
q a 0.4 0.2 0.5
a q 0.3 0.2 0.3
2 z 0.99 0.3 0.8
为此,我使用awk命令
awk -v OFS='\t' '{if(NR<=1){for(i=3;i<=NF;i
根据Nextflow文档,我将awk脚本放在bin/文件夹中。一些脚本共享相同的函数,因此我编写了一个文件,其中仅包含awk函数,我通常使用:
@include "relative/path/to/lib.awk"
但是由于脚本在nextflow工作目录中运行,因此相对路径不再工作。我也试图将库文件放入bin/中,但效果不太好
我应该如何进行?我不想复制/粘贴脚本中的函数,也不想硬编码绝对路径。感谢@Pallie提供有关workflow.projectDir的提示。关于这个变量的文档是(我想我
如果AWK中没有BEGIN for loop,则在根据条件打印数字后将永远消失-
使用“开始”,i的值为5时,循环结束
$ awk 'awk 'BEGIN { for (i = 1; i <= 5; ++i) print i }'
1
2
3
4
5
$awk'awk'BEGIN{for(i=1;i循环确实会退出,但循环会在每个输入行执行一次,直到到达输入结束。输入输入输入时尝试键入control-D而不是control-C以提供EOF指示。将print i更改为print NR,i并添
为了进行解析,我需要在命令行中根据另一列的字符数将第一列的内容拉伸n次
注意:Col2包含混合类型:,[A-Za-z]
我应该这样说:
cat myFile.tsv
Col1 Col2
Text1 XXXX
Text2 XX
Text3 XXX
为此:
cat myNewFile.tsv
Col1
Text1
Text1
Text1
Text1
Text2
Text2
Text3
Text3
Text3
我需要在单行HTML/JS生成的文件中查找并替换内联svg代码
我看到许多sed和/或awk脚本的例子,用于匹配另一个文件中的文件内容,但我遇到了两个问题:要么我不知道如何用第三个文件的内容替换匹配的文件,要么搜索仅在整行匹配该文件时才有效(正在搜索的文件是单行html,所有代码粘在一起…)
将其放在简单的伪代码中,我要寻找的是:
如果在file.html中匹配了oldImage.svg,则将匹配的文本替换为newImage.svg
我知道在我运行时,整个svg文件都在html文件中匹配
gre
我怎么可能用另一个字符替换一个字符,只使用一个命令,从shell中文本文件的最后两行中选择最后一个单词?在我的例子中,仅将出现的a替换为最后一个单词的E
例如,从包含以下内容的文本文件:
tree;apple;another
mango.banana.half
monkey.shelf.karma
为此:
tree;apple;another
mango.banana.hElf
monkey.shelf.kErmE
我尝试使用sed-n'tail-2'mytext.txt'-r's/[a]+
我有这样的文件(超过1行)
20 14370 rs6054257 G A 29 PASS NS=3;DP=14;AF=0.5;DB;H2 GT:GQ:DP:HQ 0|0:48:1:51,51
20 17330 . T A 3 q10 NS=3;DP=11;AF=0.017 GT:GQ:DP:HQ 0|0:49:3:58,50
20
继续链接中的问题
我有另一个包含数据的文件2
cell input out type fun level
CLK C Z seq Cq 1
DFk C,Cp Q seq IQ 1
DFR D,C Qn seq IN 1
SKN SE,Q Qp seq Iq 1
下面的代码是将级别总和设为7并打印行
awk '
function rnd(max) {
我有一个多行文件,其中记录由新行分隔(\n)
每个记录拆分都由一些文本break标识
如何使用awk,以便在记录以break开头或结尾时将其连接到上一行或下一行,同时保留记录分隔符
输入($表示下线)。多次中断可以忽略或视为一个:
A| break;$
B| break;$
C| break;$
D$
E|$
break; FGH|$
break; IJ| break;$
KLM| break;
NOP$
期望输出:
A|B|C|D$
E|FGH|IJ|KLM|NOP$
当前代码(适用于结束
我有一些文本需要拆分以提取相关参数,而我的[g]awk match命令不起作用-我只是想了解为什么?!(我现在用了一种不那么优雅的方式来解释……)
因此字符串是blahblah | msgcontent1=headeruiiewconsenflagpsmessage | msgtype2=Blah002 | msgcontent2=header
我只想输出msgcontent1=的内容,我也是这样做的
echo“blahblah | msgcontent1=headeruiiewconsenfl
1 2 3 4 5 6 ...
下一页 最后一页 共 80 页