我需要在第二个文件中搜索一个文件中的字段。想知道awk是否是正确的解决方案
文件1
one
two
文件2
something one
balh one
blah two
blah two
所需输出
one ["something one", "blah one"]
two [ "blah two" , "blah two"]
我希望我可以在awk中使用awk,在第二行中搜索每一行并构造输出。调用一次awk就足够了
awk '
FNR == NR {
# readi
我有一个包含50000行浮点值的文件。我只需要每100行选择一个数据。awk编程中是否有可用的命令
非常感谢。要打印编号为100、200、300的行。。。你可以做:
awk 'NR%100==0' inputfile
备选方案,sed解决方案:
sed -n '100~100p' file
更一般地说,表达式A~Kp意味着从行A开始打印每第k行。相同的想法:awk'!(NR%100)“文件谢谢您的代码。但是如果我运行这段代码,我就得不到第一行。如果我想包含第一行,该怎么做?
正如toppic所建议的,如何从多个文本文件中读取信息,并在一个数组中只添加一次元素,而不管它们是否在不同的文本文件中多次出现
我从这个脚本开始,它按照元素在不同文档中出现的顺序读入并打印出所有元素
例如,看看这3个不同的文本文件,其中包含以下数据
文件1:
2011-01-22 22:12 test1 22 1312 75 13.55 1399
2011-01-23 22:13 test4 22 1112 72 12.55 1499
文件2:
2011-01-24 22:14 test1
我需要一个删除重复行的解决方案,其中第一个字段是IPv4地址。例如,我在文件中有以下行:
192.168.0.1/text1/text2
192.168.0.18/text03/text7
192.168.0.15/sometext/sometext
192.168.0.1/text100/ntext
192.168.0.23/othertext/sometext
因此,在前面的场景中,它只匹配IP地址。我只知道IP地址的正则表达式是:
\b\d{1,3}\.\d{1,3}\.\d{1,3}\
我试图从一个类似这样的文件中提取所有的数字(只是数字)(总是三个“| | |”)并确保数字后面跟着3|||
file:
12342|||blah blah
31221|||foo bar
12342|||bar foo
我只想要12342312112342
到目前为止我有
//works
echo "2333|||test" | awk -F "([^1-9])+\|" '{print $1}'
// should fail and return none
echo "2333|||te
我的命令send in expect脚本有问题。
我以前从未使用过expect,所以它有很多我不知道的特性,主要是关于语法
实际上,它捕获了cpu使用率
top-n10-d0.01 | awk'BEGIN{FS=“[,%]”printf“(“}/^Cpu/{
gsub(/[^0-9.,]+/,“”,$7);gsub(/^3949/,“”,$7);printf$7“+”}
结束{print 0“/10”}| bc
我想做的是:使用expect,使用send命令。我想通过脚本传递那个字符串
我试着这
我有一个日志文件,其中包含如下内容
Mar 19 07:00:32 192.168.100.58 DefensePro: 21-11-2010 09:31:18 WARNING 150 HttpFlood "HTTP Page Flood Attack" TCP 0.0.0.0 0 192.168.100.6 0 0 Regular "File Server" term 0 0 N/A 0 N/A medium forward XXXXXXXX-XXXX-XXXX-18CE-2222B3148B
这是一个相当重复的问题,但我无法用我的文件解决它,因此,任何帮助都将不胜感激
我有两个文件,我想比较它们的第一个字段,并将公共行打印到第三个文件中,这是我的文件的一个示例:
文件1:
gene1
gene2
gene3
文件2:
gene1|trans1|12|233|345 45
gene1|trans2|12|342|232 45
gene2|trans2|12|344|343 12
gene2|trans2|12|344|343 45
gene2|trans2|12|344|343 12
比如说
我想把13.29s添加到2013-4-24 3:10:50.50
如何处理毫秒
我曾尝试使用mktime和strftime,但似乎只能处理秒数…这不是一件简单的事情,但现在我们开始:
time="2013-4-24 3:10:50.50"
echo "13.29" | awk '{split(v,a,"[ -:.]");t=mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6])+(a[7]/100)+$1;print strftime("%Y-%m
我有两个文件,par1.txt,par2.txt。我想查看两个文件的第一个字段或列,比较它们,然后如果它们匹配,则打印匹配的记录或行
示例文件:
par1.txt
ocean;stuff about an ocean;definitions of oeans
park;stuff about parks;definitions of parks
ham;stuff about ham;definitions of ham
par2.txt
hand,stuff about hands,defi
我有一个文件和一个字段是一个时间戳,如20141028 20:49:49,我想获得小时20,因此我使用系统命令:
hour=system("date -d\""$5"\" +'%H'")
时间戳是我文件中的第五个字段,因此我使用了$5。但是当我执行程序时,我发现上面的命令只是输出20并返回0,所以hour是0,而不是20,所以我的问题是如何获得时间戳中的小时
我知道一种方法,它使用split函数两次,如下所示:
split($5, vec, " " )
split(vec[2], vec2,
使用awk:
找到一个模式。
打印该图案之后的所有线条,直到下一个图案。
打印该图案之前的所有行,直到下一个图案
如果这是文件的内容
?hello@
line-0
?type=A;so on
line-1
short-description
line-2
line-3
ending@
line-4
?bye@
匹配模式简短描述并在till模式@后打印行,在till模式前打印行?,因此输出应为:
?type=A;so on
line-1
short-description
line-2
line
文件1:
文件2:
a xyz 1 2 4
a xyz 1 2 3
a abc 3 9 7
a abc 3 9 2
a klm 9 3 1
a klm 9 8 3
a tlc 3 9 3
我想用文件2中有“abc”的行替换文件1中有“abc”的行。我是sed、awk等的新手,非常感谢您的帮助。
我尝试了cat file1 newfile和其他方法,但这个方法只是将file1复制到newfile。我也不想生成新文件,只想编辑文件1。
期望输出:
已处理文件1:
a x
我有一张10万行的桌子。格式如下:
abc '\t' gi| a b c d e
列abc由制表符分隔,而其他列由空格分隔。我想删除列“gi |”,保留所有其他列。我尝试使用tab或|作为分隔符,但效果不好。有什么想法吗?您可以使用awk的sub功能
awk '{sub(/.*/,"",$2)}1' file
或
只需为第2列变量指定一个空值
awk '{$2=""}1' file
为什么不干脆忽略字段呢
sed 's/\t[^\t ]* /\t/' file
将删除第一个制表符后面的
我正在努力解析一些日志文件
下面是它的样子:
node_name: na2-devdb-cssx
run_id: 3c3424f3-8a62-4f4c-b97a-2096a2afc070
start_time: 2015-06-26T21:00:44Z
status: failure
node_name: eu1-devsx
run_id: f5ed13a3-1f02-490f-b518-97de9649daf5
start_time: 2015-06-26T21:
标签: Awk
case-insensitivecounting
使用awk,我希望在基于相同模式总结行时忽略区分大小写的模式
我有以下几句话(非常感谢Andrey()
文件内容:
1 Used cars
12 Drivers
1 used cars
1 used cars
14 drivers
2 Used Cars
实际输出为
2 Used Cars
14 drivers
12 Drivers
2 used cars
1 Used cars
我需要的是:
26 drivers/Drivers (doesn't matter)
5 used
我以这种方式在文件中记录了每小时的数据
2015-09-03 02:00:00 to 2015-09-03 02:59:59|ABC|673
2015-09-03 02:00:00 to 2015-09-03 02:59:59|AABC|52
2015-09-03 02:00:00 to 2015-09-03 02:59:59|ABCD|787
2015-09-03 02:00:00 to 2015-09-03 02:59:59|ADFGE|35
2015-09-03 02:00:00 to 2
出于Excel的目的,我需要创建一个具有精确格式的CSV文件,其中一些列显示为浮动。这是我的输入文件结构:
'14/11/09 00:00 13.0C 25.1C 26.5C 25.4C 26.3C 25.0C *** *** Some text Control
'14/11/10 08:49 POWER ON
到目前为止,我已经能够去掉“点”而改用“
我编写了一个代码来计算zscore,它计算一个文件的平均值和标准偏差,并使用另一个文件行中的一些值,如下所示:
mean=$(awk '{total += $2; count++} END {print total/count}' ABC_avg.txt)
#calculating mean of the second column of the file
std=$(awk '{x[NR]=$2; s+=$2; n++} END{a=s/n; for (i in x){ss += (x[i]
我在HDFS中有一个csv文件,我正在使用fread()读取到R中。数据如下所示:
Date Code Value TransactionID
2016-01-01 769 123 16U11863C2MS0000337625C1
2016-02-01 2MS-US 456 16U11863C2MS0000337626C1
2016-03-01 E9E-US 789 16U11863C2MS0000337627C1
fread("hadoop fs -
在下面的awk中,我试图捕获KCNMA1的所有条件,即文件的$8中选项卡分隔的中的gene行(一列名称列表)
R_Index Chr Start End Ref Alt Func.IDP.refGene Gene.IDP.refGene GeneDetail.IDP.refGene
4629 chr10 78944590 78944590 G A intergenic NONE;KCNMA1 dist=NONE;dist=451371
46
tmp.log:
[2016-12-01 00:00:01] ...
[2016-12-01 00:00:02] ....
[2016-12-01 00:00:03] .....
[2016-12-01 00:00:04] ......
命令:
awk '$0>="[2016-12-01 00:00:01]" && $0<="[2016-12-01 00:00:03]"' tmp.log
预期:
[2016-12-01 00:00:01] ...
[2016
我正在用awk做一些简单的数学题
user@lab-client:~$ awk '{ram=(1.8 * 1024) * 1024; print ram}'
1.88744e+06
所以我假设这意味着这个数字太大,无法存储在变量“ram”中
总数为:1887436.8
让我们尝试将该数字存储在变量中
user@lab-client:~$ awk '{ram=1887436.8; print ram}'
1.88744e+06
还是一样。但是如果我们去掉了“.”呢
进一步的测试表明,当点位
我有一个结构如下的XML文件:
<diskTypes>
<diskType typeName="data001" sectors="5859356127" sectorSize="512"/>
<diskType typeName="data002" sectors="23437457375" sectorSize="512"/>
<diskType typeName="data003" secto
我想对文本文件中的多个列求和,如下所示:
GeneA样本34 7 8 16
GeneA样本17 7 10 91
GeneA样本42 9 8 11
我想在第3-5列的底部生成总和,这样看起来:
GeneA样本34 7 8 16
GeneA样本17 7 10 91
GeneA样本42 9 8 11
93 23 26
我可以将其用于单个列,但不知道如何指定列的范围:
awk -F'\t' '{sum+=$3} END {print sum}' input file> out
最简单的
前段时间我发了一篇帖子,里面我正在寻求帮助修复一个文本文件。。
我的问题是我有一个文本文件,其中的行位置不正确
例如:
脚本的目的是按照正确的顺序连接每个句子的概率
那么在这种情况下,最终结果会是什么呢
众多解决方案之一是:
awk 'NF == 2{ match($1,/^[0-9]+(_[0-9]+){7}/); k = substr($1,RSTART,RLENGTH); next }
{ $NF=""; a[k]=a[k]"\n "$0 }
END { for(i
标签: Awk
matchmultiple-columns
我试图比较两个文件,并将每个文件的不同列组合在一起。示例文件包括:
1.txt
chr8 12 24 . . + chr1 11 12 XX4 -
chr3 22 33 . . + chr4 60 61 XXX9 -
2.txt
chr1 11 1 X1 X2 11 12 2.443 0.843 +1 SXSD 1.3020000
chr1 11 2 X3 X4 11 12 0.888 0.833 -1 XXS
我编写了一个脚本,用于从数据文件中获取平均值和STDEV。
假设数据文件包含以下数据:
1
2
3
4
5
awk脚本如下所示
awk '{MEAN+=$1/5}END{print MEAN, STDEV=sqrt(($1-MEAN)**2/4)}' dat.dat>stat1.dat
但它给我的STDEV=1的值不正确。它一定是1.5811。你知道我的脚本中有什么地方不正确吗?我如何改进它?请尝试以下内容,并让我知道这是否对您有帮助(这应该适用于提供的数据,并且如果您的实际文
我有很多行,以;,然后是一个或多个空格,后跟同一行上的其他字符。我需要删除下列空格:;最多包含但不包括后面的字符
我尝试了以下代码的一些变体,因为它在有空格的行上非常有效,但我对awk不是很熟悉
awk '{gsub(/^ +| +$/,"")}1' filea>fileb
样本输入:
; 4
; group 452
; ring
需要输出:
;4
;group 452
;ring
要删除第一个分号后的任何空格,请尝试:
$ awk '{sub(/^;[
我有一个文本文件,我想通过删除包含特定单词的行来拆分此文件。例如:
remove those lines containing the word 'fish' from the file and output them into fish.txt
remove those lines containing the word 'cat' from the file and output them into cat.txt
这可以用vim、grep或其他简单的方法方便地完成吗?它不必在一个流程
我有一个脚本来解析TeamCity目录映射文件。该脚本可以工作,但我想知道为什么重构为使用变量会导致出现看似无关的错误消息,以及如何使用变量使其工作
MAP=/opt/TeamCity/buildAgent/work/directory.map
请问这有什么问题
awk 'NR == FNR { x[$1]=$1; next} { print x[$5], $0 }' A.dat B.txt > C.txt
我想:
如果文件A.dat的第一列等于文件B.txt的第一列,则打印文件A.dat的第五列和文件B.txt的其余部分
A.dat
B.dat
期望结果
C.txt
对于显示的示例,请尝试以下代码
awk 'FNR==NR{arr[$1]=$NF;next} ($1 in arr){print arr[$1],$0}' A.d
我对买一本关于awk的书很感兴趣。尽管我玩了很短时间,但我还是被说服了。然而,与此同时,我有一个问题,我怀疑我可以完全用[g]awk解决。为了演示,我将使用一些fdisk输出。在本例中,期望的最终结果如下:
Disks: 2 [240 GB total]
sda=120 GB
sdb=120 GB
以下是我所拥有的:
fdisk -l 2>/dev/null | awk '/^Disk \/dev\/[vsh]d./ {bytes+=$5} END {print "Disks: "NR"
我正在尝试使用awk提取文件路径中的特定子字符串。假设我在awk命令中输入了a/workspace/folder.fold/secondfolder/file.ext,那么如何将其生成为folder.fold/secondfolder/file.ext
我试着去做
| awk -F "/" '{ print $2 }'
但这只给了我文件夹。非常感谢您的帮助,因为我是awk的新手
编辑:它实际上以a/workspace/folder.fold/secondfolder/file.ext的形式出现
我正在使用UNIX,不知道是否可以使用grep或awk或其他工具来实现以下功能:
如果您有文件:
Delete-me
1
2
3
4
Delete-me
1
2
3
4
Delete-me
1
2
3
4
如何获得此输出:
3
4
3
4
3
4
单向:
awk '/Delete-me/ {getline;getline;getline;print;getline;print}'
3
4
3
4
3
4
另
我有一个文件:
AWK question about the example
此命令运行良好:
awk '{ gsub(/...../, "&\n" ) ; print}' file
AWK q
uesti
on ab
out t
he ex
ample
为什么此命令不打印相同的结果
awk '{ gsub(/.{5}/, "&\n" ) ; print}' file
AWK question about the example
awk -v WIDTH=5 '{ gs
我有一个设备列表,在保留顺序和匹配条件的同时,我需要删除重复的设备(只保留第一次出现的设备)。在本例中,我要查找一个特定的字符串,然后打印带有设备名称的字段。以下是来自sar应用程序的一些原始数据示例:
10:02:01 AM sdc 0.70 0.00 8.13 11.62 0.00 1.29 0.86 0.06
10:02:01 AM sda 0.00 0.00
我有一个如下所示的文件:
54.0874 -326.094
56.8374 1241.89
57.5374 1644.74
第二个值以度为单位,我想在awk中减去360,只要该值在-360和0之间
我想要的输出是:
54.0874 -326.094
56.8374 -198.11
57.5374 -155.26
我在查看awkwhile循环,但找不到有用的解决方案
我唯一要做的就是处理几个if语句,但我想要一个在任何情况下都有效的解决方案
awk '{if($2<=0.0) { pri
我想解析以空格分隔的行。文本是这样的:
Record: 123456 xyz-1.1.1
Item Date
abc 05-DEC-14
ijk 05-DEC-14
Record: 987654 abc-2.2.2
Item Date
xyz 06-DEC-14
bcd 06-DEC-14
Record: 567890 stu-3.3.3
I
我有以下文件
ID Score Other
ABR 0.98 NBNMSB
BCG 0.76 NBNMSB
CVD 0.6 NBNMSB
BCG 0.9 VSCVA
CVD 0.56 VSCVA
ABR 0.9 VSCVA
CVD 0.7 BAVSC
BCG 0.4 BAV
我使用这个命令
awk -F";" '{ print $0 "VVVVVVVV" $10 }' FILE3.csv
这张照片印得很好,但这张照片的顺序是这样的
VVVV;第10栏第1列;第2栏;第3栏:第4栏;第5栏……第10栏
我需要反向打印
column1;第2栏;第3栏:第4栏;第5栏……第10栏;VVVV;第10栏
但是不工作我怎么能做到这一点呢?你也可以这样做
$ awk -F";" '{ sub("\r",""); print $0 "VVVVVVVV" $10 }' file
我有两个像这样的文件。这两个文件在第1个然后是第2个字段上排序。一个ID可以有多行
归档
3337312|6dc1d4397108002245c770fa66ee4d7767dcc23e|1
3337313|cb1c00eeccb25ea5a069da63a1b0c2565379ff9c|1
3337318|61a813730578c552b62de5618e1d66b1eb74b4f8|1
3337319|6af3b98f25a6a9b9d887486aefddfb53947bbf1c|1
3
我有一个单词文件(每行1个单词)。我需要用*检查单词中的所有字母,前五个除外
前
Authority->Autho****
我不太清楚如何做到这一点。Perl拯救:
perl -pe 'substr($_, 5) =~ s/./*/g' -- file
-p逐行读取输入,并在处理后打印每一行
返回从给定位置开始的给定字符串的子字符串
s/*/g用星号替换任何字符。g意味着替换将尽可能多次发生,而不是一次,因此所有字符都将被替换
在某些版本的sed中,您可以通过在操作后添加数字来指定应进行的
如何在打印中写入程序应首先计数,然后应用t函数?我想要的结果是小数点后六位被削减,而不是四舍五入。多谢各位
/^$/ { flag=0; next; }
/D Format/ { flag=0; next; }
/F Format/ { flag=1; next; }
/^ 9 / { print t($5) "\n" t($6); }
/^10 / { print t($5) "\n" t($6); }
/^11 / { print t($5*180/3.141592653589)
我在一个文件夹中有50个文件,所有文件都有一个共同的模式“^^”。我想打印“^^”之后的所有内容,并附加文件名,将所有提取的行打印到一个输出文件中。虽然我的代码可以处理单个文件,但不能处理所有文件
awk '/\^^/{getline; getline; print FILENAME; print}' *.txt > output
范例
1.txt
2.txt
hghjhg hgj
jhgj
jhgjh kjgh
jhg
^^
bbbb
我有很多(比如17000个)包含链接的html文件。每个html文件可以包含许多链接,但它们都引用相同的视频mp4,但分辨率不同。我只想grep出最高分辨率的链接,也就是说,如果有720、1080或1440的引用,我想要1440的链接,而不是其他的链接。但最大分辨率各不相同,因此我不能只硬编码1440(例如,在另一个1440中,一个html文件中的最大分辨率可能是720)
html文件的内容每个都在2k到80k之间,并且具有具有这种结构的重复内容,有时在一行中,有时跨越多行
{"url":"ht
代码
awk '{for(i=1;i<=NF;++i){$i=toupper(substr($i,1,1))tolower(substr($i,2));}print}'
tolower部分占据所有行,如果我通过某个字段(例如数字2)进行更改:
$> echo 'Aaaa Bbbb Cccc DDDD Eeee Ffff Gggg HHHH' | awk '{print toupper(substr($0,1,1)) tolower(substr($2,2)) }'
$>
我想剪切我的urlhttps://jenkins-crumbtest2.origin-ctc-core-nonprod.com/进入https://jenkins.origin-ctc-core-nonprod.com:443。我试过几种方法来处理它
以这些方式尝试
$ echo https://jenkins-crumbtest2.origin-ctc-core-nonprod.com/ | cut -d"/" -f3 | cut -d"/" -f5
jenkins-crumbtest2.or
我有一个以下格式的大文件,其中第一列是id,然后所有都是示例。我试图只提取ID,其中只有一个样本的值大于5,其余所有样本的值都小于5。此外,我还希望打印样本id以及该值大于5的样本值。最好的方法是什么?我可以根据我在论坛上遇到的所有ID来识别完全符合条件的ID;但却无法得到我所期待的
awk '{for(i=1;i<=NF;i++) {if($i+0>5) c++; printf "%-5s%s", $i, (i==NF? OFS c ORS: OFS)}c=0}' input.t
我有一个文件,其中有几行以>
我想计算每个文件中这样的行数
awk '{if(/>/){count += 1}{print count}}' file.text
1
1
2
2
显然这里我只想要最后一个“2”。基本上我希望awk打印count的最后一个值。在我看来,这应该很容易做到,但却找不到方法
我知道有像grep-c这样的解决方案可以完成这项工作,但我很想拥有awk版本
多谢各位
编辑:我试过这个
awk '{if(/>/){count += 1}END{print count
上一页 1 2 ...
10 11 12 13 14 15 16 ...
下一页 最后一页 共 152 页