我有一行正在读取系统地址,其中01-47之间可以有一个通配符(具体地址类似于ring???.host.com)
我试图让awk使用regexp识别条件参数中的任何数字
到目前为止,这是我提出的,但似乎不正确
/ring[0-4][0-7].host.com/{ (rest of blah blah blah goes here)}
我知道这可能会给我值00,但我可以安全地假设在本例中,它将在01-47连接
提前感谢您的帮助 您可以使用一些奇特的正则表达式,或者您可以简单地测试数字是否不等于“0
我在编写脚本来替换双引号内的字符串时遇到问题。文件部分如下所示:
"regA~1" : "FF_NODE~94"
"regA~2" : "FF_NODE~105"
"regA~3" : "FF_NODE~116"
"regA~4" : "FF_NODE~127"
"regA~5" : "FF_NODE~138"
"regA~6" : "FF_NODE~149"
"regA~7" : "FF_NODE~154"
"regA~8"
我有一个小问题,如果能帮我解决,我将不胜感激
总之,我有一个文件:
1,5,6,7,8,9
2,3,8,5,35,3
2,46,76,98,9
我需要阅读其中的特定行,并将它们打印到另一个文本文档中。我知道我可以使用(awk'{print“$2”“$3”})将第二列和第三列并排打印。但是,我需要使用两条语句作为(awk'{print“$2”}>>file.text)然后(awk'{print“$3”}>>file.text),但这两列将显示在彼此下方,而不是彼此旁边
如何使它们显示在一起?
我尝试使用以下脚本计算移动平均值:
BEGIN {
P = 100;
}
{
x = $2;
i = NR % P;
MA += (x - Z[i]) / P;
Z[i] = x;
print $1,"\t",$2,"\t",MA;
}
但是我需要知道怎么把它放在中间?
输入的示例:
Depth Ve
我有一个很长的文本字符串文件,按长度排序。我需要做的是找到包含在长线中的任何短线,将长线拆分为两条短线,并保留原始短线不变,如下所示:
input:
here is an example of a long line
an example of
output:
here is
a long line
an example of
您尚未发布足够的数据集,我们无法发布完整的解决方案,但以下是一些帮助您开始的内容:
$ awk '
NR==FNR{
a[$0]++;
next
}
{
我试图在$5(ref)中对符号进行计数,并使用awk输出重命名的符号和计数。输入文件以制表符分隔,下面的awk关闭,但输出的额外数据计数不正确,我不确定如何修复它。谢谢:)
awk
awk -F'\t' 'BEGIN {printf "Category\tCount\n" } $5 ~ /-/ {printf "indel" } {a[$5]++} END { for (i in a) {printf "%s\t\t%s\n",i , a[i] }}' input
输入
Index Mut
希望根据每个类别的$1和$3组合打印前三个最小值。输入文件未按任何顺序排序。
期待你的建议
Input.txt
Country,Desc,Amount,Details
Abc,xxx,20,aaa
Abc,yyy,10,aaa
ghi,ttt,25,ccc
Abc,zzz,5,aaa
def,xxx,30,bbb
Abc,ttt,15,aaa
def,yyy,20,bbb
ghi,yyy,25,ccc
def,zzz,30,bbb
ghi,xxx,35,ccc
ghi,zzz,50,ccc
de
我试图用Awk实现这个逻辑:
如果$3在$1中,则将“$1的$3部分和1空格”替换为“”(空格)。
打印此新行和所有其他行
e、 g.在我的输出(如下)中,字段$3中的“巴黎”位于字段$1中。因此,字段$1中的“Paris”替换为“”
输入文件
field1|field2|field3
abc Paris Match|xxxx|Paris
aaaaa|yyyyy|London
所需产量
field1|field2|field3
abc Match|xxxx|Paris
aaaaa|yyyyy|
我有这个档案:
100 230 a
104 310 b
我想使用模式a获取第二列,并将其添加到模式b的第二列
我试过这样的东西
awk '/a/ { var1=$2 } /b/ { var2=$2 } { print var1+var2}'
但不要工作,它向我展示了哥伦布的所有价值。我似乎找不到这样做的方法。{print var1+var2}对文件的每一行执行。如果希望在最后一行之后的最后一行执行,请使用end{print var1+var2}{print var1+var2}为文件的每一行
如果某个文本是
cell (ABC)
(A1)
(A2)
function (A1.A2)
我希望输出为
cell ABC
A1
A2
function (A1.A2)
我想从文件的每一行中删除括号,函数行中的present除外。
使用代码
sed 's/[()]//g' file
从每行中删除括号。如何修改上述代码以获得所需的输出。请尝试以下内容。使用GNUawk中显示的样本编写和测试
awk '!/function/{gsub(/[()]/,"")} 1' Inp
我想在awk脚本中运行system命令,并将其输出存储在变量中。我一直在尝试这样做,但是命令的输出总是转到shell,我无法捕获它。关于如何做到这一点有什么想法吗
例如:
$ date | awk --field-separator=! {$1 = system("strip $1"); /*more processing*/}
应该调用strip系统命令,而不是将输出发送到shell,应该将输出分配回$1,以便进行更多处理。现在,它将输出发送到shell,并将命令的retcode分配给$1计
如何使用awk在文本文件中每三行之间留出两倍的空间
样本输入:
样本输出:
如果您有任何建议,我们将不胜感激
awk 'NR % 3 == 0 { print $0 ; print "" } NR % 3' INPUTFILE
还有其他方法…我可以给你一个提示,但其余的应该由你决定:)*?\n.*\n.*?\n会给你三行。现在您只需添加另一个换行符。@twall:这在AWK中不起作用。是的,对不起,我已经考虑过了……这个!=0和{print$0}可以删除以缩短命令,因为它们在默认情况下都是隐式
我正在打印一个包含100列的数组,我希望所有列都有2个小数。我希望使用print$0,而不必为所有列单独指定格式
OFMT与$0不起作用:
echo '0.77767686 0.76555555 0.6667667 0.77878878' |awk '{CONVFMT="%.2g";OFMT="%.2g";print ($0+0);print ($0+0)"";print $0}'
结果:
0.78
0.78
0.77767686 0.76555555 0.6667667 0.7787887
我有一个文件1:
6
3
6
9
2
6
此命令打印结果:
awk 'NR==1{a=$1};$0!=a' file1
3
9
2
3 3 4 4 5 6
9 5 3 2 8 1
2 5 6 5 3 1
5 4 1
2
现在我有文件2:
6 1 2 3 4 5
3 3 4 4 4 6
6 5 2 2 5 1
9 1 3 5 4 1
2 5 6 4 8 5
6 1 5 2 3 1
我想做同样的事情,但是使用file2。我想打印出结果:
我不熟悉linux和命令行。我正在试图找到一个命令,该命令允许我将除第一个以外的所有字段的空白(在.csv文本文件中)替换为分号。请看下面的例子,任何帮助都将不胜感激,我已经花了很长时间寻找解决方案。如果你有一个答案,请你解释一下命令,这样我就可以试着了解如何以及为什么。非常感谢
输入文本的示例:
0 k__Bacteria p__Firmicutes c__Bacilli
1 k__Bacteria p__Firmicutes c__Clostri
我不知道如何从这些行中去掉“DST=”。。
这是我的命令(它应该返回什么),如果有更有效的方法或更好的方法,请随意批评
awk '{print $10}' iptables.log |sort -u
DST=96.7.49.64
DST=96.7.49.65
DST=96.7.50.64
DST=98.27.88.26
DST=98.27.88.28
DST=98.27.88.45
DST=98.27.88.50
如您所见,我需要从iptable日志中获取唯一的ip
谢谢 您可以通过sed将
我正在尝试将字符串}{替换为},{使用awk和gsub
我的尝试是:
cat blobs.txt | awk '{gsub(/\\}\\{/,"},{"); print}' >> blobsDone.txt
我在某个地方读到,括号之类的字符需要两个反斜杠才能匹配,但不起作用。有人能帮我一下吗?我快疯了。这样就可以直接匹配了
sed -i 's/}{/},{/g' blobsDone.txt
查找}{并在blobsDone.txt中找到该文件时用}、{替换。该文件将用新内容更新
如
我使用bash和awk脚本从文本文件中提取数据。
但是,它对于大型数据集来说速度太慢,并且不能完美地工作。我相信在一个awk命令中编写所有bash循环是可能的,我请求某人帮助我完成这项工作
cat dummy_list
AAA
AAAA
AAAAA
cat dummy_table
13 19 AAA 69 96 "ID-999" 34
23 42 AAA 12 19 "ID-999" 64
53
我有一个4列的文件。第2列和第4列有数字
a 55 k 3
b 59 l 3
c 79 m 277
d 255 n 277
e 257 o 267
f 267 p 287
g 290 q 287
h 290 r 287
i 310 s 900
55k3
b 59 l 3
c 79M 277
d 255 n 277
e 257 o 267
f 267 p 287
g 290 q 287
h 290 r 287
i 310 s 900
我需要将第2列中的所有行与第4列中的行进行比较(不限于相同的
我有两个文件file1和file2,如下所示。file1有两列,file2有一列。我想在file1的基础上向file2添加第二列。我怎样才能用awk做到这一点
文件1
文件2
期望输出
2WPN_1 B
2WPN_2 B
2WPN_3 B
2WUS A
2X83 A
2XFG_1 A
2XFG_2 A
2XQR C
谢谢你的帮助
awk -v OFS='\t' 'FNR == NR { a[$1] = $2; next } { t = $1; sub(/_.
我有2个文件,我需要根据第3列合并(pos)。然后找到匹配的位置,并使用awk创建如下所示的理想输出。我想有4列输出。第四列表示两个文件中的公共位置,其秩号为
File1.txt
SNP-ID Chr Pos
rs62637813 1 52058
rs150021059 1 52238
rs4477212 1 52356
kgp15717912 1 53424
rs140052487 1
标签: Awk
associative-array
在awk中,我很难理解数组和关联数组。
假设您想使用关联数组比较两个不同文件中的两个不同列,您会怎么做?假设文件1中的列1和文件2中的列2,然后在文件2中的新列中打印文件1的匹配、对应值。请非常简单地解释每一步,就像和你的祖母交谈一样,我的意思是,非常彻底和非常简单。
干杯关联数组(又名贴图)的简单解释,不专门针对awk:
与每个元素都有数字索引的普通数组不同,关联数组使用“键”而不是索引。您可以将其视为一个简单的平面文件数据库,其中每个记录都有一个键和一个值。因此,如果您有一些薪资数据,例如:
我的数据集如下:
col-1 col-2 col-3 col-4 col-5 col-6 col-7 col-8
0 17 215 55.7059 947 BMR_42 O22-BMR_1 O23-H23
1 1 1 1.0000 1 BMR_42 O23-BMR_1 O23-H23
2 31
我有一个文本文件。有几百行。每行文字可以是英文,也可以是中文,但不能同时是英文(也有一些例外,但可能小于这一行文字可能有助于:
awk '/[^\x00-\x7f]/{print >"cn.txt";next}{print > "en.txt"}' file
它将生成两个文件cn.txt和en.txt。它检查该行是否至少包含一个非ascii字符,如果找到一个,该行将被视为中文行
小测试:
kent$ cat f
this is line1 in english
你好
this
我有一个包含两个选项卡分隔列的文件,一个ID列和一个序列列
122_mex1 TGCAGGC
122_mex1 TGAAAAA
122_mex2 TGCAGTC
122_mex2 TGCAGTC
122_can4 TGCATTT
239_mex1 TGCAAAA
239_mex2 TGCAAAA
239_can4 TGCAGC
我想修改ID列(第1列)的末尾,以便每一行都有一个重复的ID(第1列)——在这个玩具数据集中,结果是更改122_mex1和122_mex2的第二个实例,在这些行的ID上
使用,可以多次打印字符:
$ printf "%0.s-" {1..5}
-----
在awk中,我知道我可以做到:
但是,如果可能的话,我缺乏关于如何用awk的printf模拟这种行为的知识,因为这样做失败了:
$ awk 'BEGIN {printf "%0.s-", 1 2 3 4 5}'
-
我认为这在awk的printf中是不可能的
对于awk,我认为最合理的选择是使用像您这样的循环。如果出于某种原因,性能至关重要,而awk正在制造瓶颈,则以下操作将加快速度:
awk 'BEGIN
我想打开一个包含500个IP地址列表的文本文件。我想对其中一行进行以下更改并保存文件。使用awk或sed可以这样做吗
当前行:
100.72.78.46:1900
变化:
100.72.78.46:1800
您可以通过以下方式实现这一点:
sed -ie 's/100.72.78.46:1900/100.72.78.46:1800/' file.txt
i选项将更新原始文件,并创建备份文件。这将仅编辑图案的第一个匹配项。如果要替换所有匹配的模式,请在最后一个/
但是,这种解决方案(如注释中
今天早些时候,我看到了一个——显然格式不好,因此已经被删除了——关于删除重叠区间(或范围,从此以后的区间)的问题。问题是如何删除完全在其他间隔内的间隔。例如,我们有以下几点:
1-2
2-3
1-3
2-4
或者,如果视觉效果稍微好一点:
1-2
2-3
1---3
2---4
区间1-2和2-3都被删除,因为它们包含在区间1-3中,因此输出为:
1-3
2-4
先验算法可能是检查每个间隔与其他间隔,从而进行O(n2)比较。有人建议在处理之前对源数据进行排序,这个问题还有其他角度吗
我对使用linux非常陌生,我正在尝试查找/替换文件中的一些文本
我已成功使用gsub查找并替换“0/0”:
awk'{gsub(/0\/0/,“0”)};1'文件名
但是,如果我尝试使用相同的想法替换“/”
awk'{gsub(/\.\/\./,“U”)};1'文件名
输出被截断并在文件中第一个“/”的位置停止。我知道“.”是一个特殊的通配符,但我认为在它前面加“\”会使它无效。我已经搜索过了,但是找不到解释为什么我使用的公式会截断文件
任何想法都将不胜感激。谢谢。回想一下awk的基本轮廓是:
我试图回答这里提出的问题
我试着
awk '{ print gensub(/[([0-9]+.[0-9]+) - ([0-9]+.[0-9]+)]/,"\\1","g")}'
但它不起作用,我不明白为什么。请告知
提供的输入:
10368,"Verizon DSL",DSL,NY,NORTHEAST,-5,-4,"[1.1 - 3.0]","[0.384 - 0.768]"
期望输出:
10368,"Verizon DSL",DSL,NY,NORTHEAST,-5,-4,1.1,0.38
看看下面的代码。我的意图是只在字母行中设置变量p
awk '/^[A-Z]/{p="$0"; print "set p: " $p}
{print "p: " $p}' <<EOF
A
1
2
3
B
4
5
6
EOF
虽然p仅在字母行中设置,但每行中的值都会发生变化。为什么?$p表示其编号包含在变量p中的字段。因此,如果p为4,$p表示第四个字段。我怀疑您将Awk语法与Perl或shell语法混为一谈
(在我的MacOS上,我得到了awk:invalized field$($0
我有一个名为stat.txt的文本文件,其中包含每行的格式
--。每行包含一个用户名、一个IP地址、一个文件名和一个下载文件大小。我需要创建一个脚本userstat.awk,它允许在编写特定命令时获取以下数据:
userstat.awk u-将列出所有文件
userstat.awk total-将列出所有文件的总大小
到目前为止,我已尝试使用默认命令列出用户的所有文件,但无法使用这些命令。给定stat.txt:
user-1.1.1.1-file.jpg-20
root-1.1.1.1-file
标签: Awk
delimiterdelimited-text
我经常需要处理杂乱无章的文本数据,这些数据需要拆分为字段
我有很好的经验使用退格008十进制作为字段分隔符,删除十进制127作为记录分隔符,因为它们从未出现在键入的文件中
我可以得到一个程序,以我想要的方式分割所有内容,但我也想使用awk。它接受RS=但它也打破了我不想要的新行记录
显然,我可以用某种序列替换换行符并将其翻转回去,但是有没有更巧妙的方法来做到这一点?我认为如果您根据需要设置RS和FS,这会像您预期的那样工作
鉴于:
$ echo -n $'a\bb\bc\177c\bd' | o
我试图使用awk删除制表符分隔文件中的重复行,如果它们的$2值为Fusion,并且每行中的$4值相同。在下面的示例中,第1行和第2行具有相同的$2值,其中$4值也相同,因此删除重复的第2行。第3行和第4行也遵循这一逻辑。行的数量可能是可变的,但格式将是相同的。由于第5行和第6行在$2中没有Fusion,因此跳过它们并在输出中打印。谢谢
文件
awk
期望输出
这似乎对我有用:
awk -F'\t' '{if($2 == "FUSION")a[$4] = $0; else b[$0]=$0;}EN
我无法理解此awk代码:
$0 ~ ENVIRON["search"] {
match($0, /id=[0-9]+/);
if (RSTART) {
print substr($0, RSTART+3, RLENGTH-3)
}
}
~和match()操作符如何相互作用
如果输出未打印或回送,match()如何发挥作用?它实际返回或执行什么操作?我如何在自己的代码中使用它
这与脚本有关,但这个问题的中心是理解bash和awk语法之间的区别,而这个问题的中心是理解脚本的aw
我有一个包含多个列的表,我想将表中的所有行与第一行的值逐列相乘
表:
0,140 0,130 0,140 0,150 0,160 <- values to be used for multiplication
1,270 1,190 6,080 3,760 2,810
1,290 1,140 6,110 3,900 3,050
1,370 1,160 6,310 4,030 3,020
1,370 1,150 6,50
假设我有很多列数和行数一致的文件,其中一个示例如下所示:
1 2 3
4 5 6
7 8 9
我想打印第2行的第3列,但前提是第3行的第3列==4(在本例中为9)。我使用这个逻辑是一种确定文件对于我的用例是否有效的方法,如果有效,则提取相关字段
我的尝试是,基于人们询问如何隔离某些行的其他答案:awk'BEGIN{FNR=3}$3==“4”{FNR=2;print$2}'那么您正在寻找类似的东西
awk 'FNR==2{ x = $3 }FNR==3 && $3=="4"{ p
我试着做两件事:1)每次分配一个变量。2) 每次使用文件时,将更改保存在文件中。例如
猫档案
1 2 3
4 5 6
7 8 9
10 11 12
现在,我想从第n行开始,将第2列中的每第二行增加9.88%,以获得此文件:
1 2 3
4 5.494 6
7 8 9
10 11.0868 12
我使用了下面的脚本,但问题是每次我得到不同的增量时,我必须更改9.88%,我希望有一个变量可以更改,它可以用于所有变量,我希望更改保存在原始文件中
awk 'NR==1 {pr
这是我的输入文件(有数千行):
我想使用awk计算第一列的中位数乘以X(比如说1-100)行数以及第二列相应值的平均值awk然后将数据移动到下一组行(101-201)并执行相同的操作,即第一列的中值和第二列的平均值,依此类推。不用说,我正在努力学习awk,并且已经尝试了以前的几种解决方案,但都无法完全实现
从上一篇文章中,我发现我可以这样计算平均值:
awk '{sum+=$1} NR%3==0 {print sum/3; sum=0}'
这到底是如何工作的(即,这个{sum+=$1}表达式的
下面的awk将生成选项卡删除的文件1,其中$3-$2之间的差异为每行计算并以$6打印。在执行awk之前,仅存在5个字段
如果file2的$1值与file1中的$5和file1中的$6的intron不匹配,我在用file1的$7值更新$2中遇到的问题。如果$5的值为intron,则文件1中$7的值为零。例如,file1中的第1行是intron,因此等于零或跳过(计算中不需要这些行)
file2中的$1值可能不存在于file1中,在这种情况下file2中的$2值为零。file2中的第3行就是一个例子
在启动之前,只需澄清一下:脚本需要运行的服务器是一个AIX机箱。Shell是KSH,所以我没有Bash提供的高级特性
好的,这是我需要完成的:
我有两个文件。它们都有两个列,用逗号分隔
文件“A”有大约170K行,看起来如下所示:
0000A7AED4F0C9FB1ADC14134700CadsevDDD4A000CEDCF.ext,\\server000005\F$\DICE\0035\
0000C3793C4CD6095947E44618D4Eadsev397460011D036.ext,\
我有一个4列的文本文件。我需要修改文件,使第4列中的第一个1序列保持为1,但第4列中的所有其他值都更改为0
我用多个if语句尝试了下面的awk命令,但是变量fat似乎没有正确更新
`cat sample_data.txt`
72 29 16 0 <br>
73 30 16 0 <br>
74 31 16 0 <br>
75 32 16 1 <br>
76 33 16 1 <br>
77
我正在寻找一种以特定格式显示lsblk输出的方法。
我试着用这个:
lsblk -n -l -o NAME,FSTYPE,SIZE,TYPE,MOUNTPOINT
我需要在下面转换此格式:
sda 931.5G disk
sda1 ext4 923.8G part /
sda2 1K part
sda5 swap 7.8G part [SWAP]
请注意,当没有文件系统或装入点
假设这两个输入中有一些我只想要的数据,即inputA.txt中的“A”和inputB.txt中的“B”
==> inputA.txt <==
A 10214027 6369158
A 10214028 6369263
A 10214029 6369321
A 10214030 6369713
A 10214031 6370146
A 10214032 6370553
A 10214033 6370917
A 10214034 6371322
A 10214035 6371735
A
我想将tab sep文件的行(包含9列)以相同的$1合并到特定格式
输入:
DIA 55tyr 10 HOM 1 olig_al ....
ALOP 66tel 11 HET 3 alin_et ....
ALOP 128ryp 11 HET 3 ivi_es ....
ALOP 131dat 11 HET 3 osi_et ....
ANDY 12dou 13 WILD 4 sas_rar ....
KOLIK 16dev 14 HET
但它不起作用(第二种模式与其他pbs中的第一种模式相匹配)
它只能单独工作
egrep -oP '([0-9]{1,3}\.){3}[0-9]{1,3} | [0-9]{2,5}' file.txt
->工作,但不能摆脱'在开始和结束;如果我在这个模型中删除它们,它也会与ips匹配,这是我不想要的
我还尝试:
egrep -oP '([0-9]{1,3}\.){3}[0-9]{1,3}' file.txt
grep -oP "'[0-9]{2,5}'" file.txt
sed's/\\
我的输入文件列是:
a Otu1 w 4
b Otu1 x 1
c Otu2 y 12424
d Otu3 z 1756
我想搜索第二列的每个重复,减去第四列中的值。我期望的结果是:
a Otu1 w 3
c Otu2 y 12424
d Otu3 z 1756
我在一个包含两列的小文件中尝试了以下awk脚本
a 3
a 1
b 4
awk '$1 in a{print $1
我有一个大文件,比如说file1.log,看起来像这样:
1322 a@gmail.com
2411 b@yahoo.com
a@gmail.com
c@yahoo.com
还有一个较小的文件,如file2.log,如下所示:
1322 a@gmail.com
2411 b@yahoo.com
a@gmail.com
c@yahoo.com
事实上,file1.log包含大约6500000行,而file2.log包含大约140000行
我想查找file2.log中没有出现在file1.l
尝试使用awk拆分每一行。如果有多个p或q则上的第二个拆分(无法正常工作(例如,第2行。如果出现多个拆分,我无法忽略第二个拆分。我尝试了^pq,但没有产生所需的拆分。谢谢:)
文件
1p11.2(120785011_120793480)x3
1q12q21.1(143192432_143450240)x1~2
awk
awk '{split($0,a,"[pq(_]"); print "id"a[1],a[3]}' file
当前
id1 120
我正在尝试向以下文本格式添加分隔符(实际文件有更多字段)
我看到的是每个字段的长度由每个标题下方的每个下划线块的长度给出
输入:
NAME ADDRESS PHONE
--------------------- ------------------------------------------------------------ ------
上一页 1 2 3 4 5 6 ...
下一页 最后一页 共 146 页