标签: gawk

awk和正则表达式的简单问题

 echo xx y11y rrr | awk '{ if ($2 ~/y[1-5]{2}y/) print $3}'
Run Code Online (Sandbox Code Playgroud)

为什么我无法获得任何输出?

谢谢.

regex shell awk gawk

3
推荐指数
1
解决办法
1993
查看次数

如何在awk中压缩默认打印?

这是gawk 4.0.0,在带有cygwin的Windows 7上运行.该程序被调用为

gawk -f procjournal.gawk testdata
Run Code Online (Sandbox Code Playgroud)

我有一些看起来像这样的数据:

"Date";"Type";"Amount";"Balance"
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46
"6/11/2013 11:51:17 AM";"Market Transaction";47500;399314311.96
"6/11/2013 11:12:42 AM";"Transaction Tax";-549.92;399266811.96
"6/11/2013 11:12:42 AM";"Market Transaction";61101.78;399267361.88
Run Code Online (Sandbox Code Playgroud)

我想提取事务的行,从第1个字段中删除日期部分,并将时间戳重新格式化为小数.我以为我可以用这个awk程序做到这一点:

FS=";"
OFS=";"
/Market Transaction/ {
    split($1, itemdate, " ");
    tmp = itemdate[2];
    split(tmp, hms, ":");
    timestamp = hms[3] + (hms[2] * 60) + (hms[1] * 3600);
    if (itemdate[3] == "AM")
       timestamp += 12 * 3600;
    timestamp /= 3600.0;
    $1 = timestamp;
    print;
}
Run Code Online (Sandbox Code Playgroud)

但我的输出看起来像这样:

"Date";"Type";"Amount";"Balance"
"Date";"Type";"Amount";"Balance"
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46
"6/11/2013 11:51:17 AM";"Transaction Tax";-427.5;399313884.46 …
Run Code Online (Sandbox Code Playgroud)

awk gawk

3
推荐指数
1
解决办法
1537
查看次数

使用该列的最大值标准化列数据

我有一个包含两列的数据文件.我想找出第二列的最大数据值,并将第二列的每个条目除以最大值.(所以我将在第二列中获得所有条目<= 1.00).

我尝试使用以下命令:

awk 'BEGIN {max = 0} {if ($2>max) max=$2} {print  ($2/max)}' angleOut.dat
Run Code Online (Sandbox Code Playgroud)

但我得到如下错误信息.

awk: (FILENAME=angleOut.dat FNR=1) fatal: division by zero attempted
Run Code Online (Sandbox Code Playgroud)

注意:第二列中有一些数据是零值.但是当零值除以最大值时,我应该得到零,但我得到如上所述的错误.

我能得到任何帮助吗?

提前谢谢了.

awk gawk

3
推荐指数
1
解决办法
2101
查看次数

什么">!" 做bash还是nawk?

我正在将GAWK脚本翻译成C#程序,我不知道GAWK脚本的哪个部分意味着什么.我已经找到了脚本的其余部分,但我似乎无法找到在哪里寻找其余的这些命令.

我没有其他.tg文件的例子,因为我正在将它复制盲目而且我需要把它弄好.

这些是:

date +"Report prepared %a %b %e %T %Y" >! $XTRAFILE
set ntg=`awk '\!/^#/{if(NF)print}' *.tg ad_tgs | wc -l`
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我是正确的,假设它把">!" 将"报告准备"放在$ XTRAFILE的顶部?

  2. 另外,我不知道"%a%b%e ..."是什么.

  3. 最后,以"set ntg"开头的行是否计算ad_tgs文件中的行?

bash awk gawk

3
推荐指数
1
解决办法
1853
查看次数

将字段'N'打印到行尾

我想对我在awk中遇到的问题提供帮助或指导.

我有一个包含超过5个字段的制表符分隔文件.我想输出除前5个字段之外的字段.

你能告诉我如何写一个awk脚本来完成这个任务吗?

最好的,jianfeng.mao

请注意以下类型的评论:

我的文件中有很多字段.不同的行具有不同数量的字段.每行的字段数不是标准的.

unix linux awk cut gawk

2
推荐指数
1
解决办法
8883
查看次数

使用awk替换第一次出现的文本

下面的代码替换了第一次出现的apple with banana.如何使用awk/gawk实现同样的目标?

sed -i "0,/apple/s//banana/" myfile.txt
Run Code Online (Sandbox Code Playgroud)

awk gawk

2
推荐指数
1
解决办法
4528
查看次数

与awk一起使用的正则表达式中的量词表示意外

我想处理这个列表:(当然这只是一个摘录.)

    1   S3 -> PC-8-Set
    2   S3 -> PC-850-Set
    3   S3 -> ANSI-Set
    4   S3 -> 7-Bit-NRC
    5   PC-8-Set   -> S3
    6   PC-850-Set -> S3
    7   ANSI-Set   -> S3
Run Code Online (Sandbox Code Playgroud)

这就是我做的:

awk -F '[[:blank:]]+' '{printf ("%s ", $2)}' list

这就是我得到的:

1 2 3 4 5 6 7

现在我认为量词+是等价的{1,},但当我把线改为

awk -F '[[:blank:]]{1,}' '{printf ("%s ", $2)}' list

我得到了空白,整条线读到了1美元.

有人能解释一下这种行为吗?我很感谢每一个答案!

在此输入图像描述

regex bash awk gawk

2
推荐指数
1
解决办法
458
查看次数

AWK:有没有办法限制输出字段的宽度?

我需要将字段的最终大小限制为2048.我可以使用:

ACTION_PARAMETER=substr($2,1,2048);
Run Code Online (Sandbox Code Playgroud)

但有更好的方法吗?

linux bash awk gawk nawk

2
推荐指数
1
解决办法
286
查看次数

用awk(gawk)数字排序

为了解决问题,我编写了以下gnu-awk脚本并遇到了排序问题(应该先阅读手册).

从手册:

由于IGNORECASE会影响字符串比较,因此IGNORECASE的值也会影响asort()和asorti()的排序.另请注意,区域设置的排序顺序不起作用; 比较仅基于字符值.

这是建议的解决方案:

awk '{
    lines[$0]=length($0)
}
END {
    for(line in lines) { tmp[lines[line],line] = line }
    n = asorti(tmp)
    for(i=1; i<=n; i++) {
        split(tmp[i], tmp2, SUBSEP); 
        ind[++j] = tmp2[2]
    }
    for(i=n; i>0; i--)
        print ind[i],lines[ind[i]]
}' file
aaaaa foo 9
aaa foooo 9
aaaa foo 8
aaa foo 7
as foo 6
a foo 5
aaaaaaa foooo 13
Run Code Online (Sandbox Code Playgroud)

我尝试添加0以强制数字类型,但无法达到所需的输出.有没有办法可以模拟数字排序awk/gawk

输入文件:

aaa foooo
aaaaaaa foooo
a foo
aaa foo
aaaaa …
Run Code Online (Sandbox Code Playgroud)

awk gawk

2
推荐指数
2
解决办法
5073
查看次数

如何在awk或sed中使用正则表达式,找到DNA序列中的所有均聚物?

背景

均聚物是具有连续相同碱基的DNA的亚序列,如AAAAAAA.python中的示例用于提取它:

import re
DNA = "ACCCGGGTTTAACCGGACCCAA"
homopolymers = re.findall('A+|T+|C+|G+', DNA)
print homopolymers
['A', 'CCC', 'GGG', 'TTT', 'AA', 'CC', 'GG', 'A', 'CCC', 'AA']
Run Code Online (Sandbox Code Playgroud)

我的努力

我制作了一个解决问题的gawk脚本,但没有使用正则表达式:

echo "ACCCGGGTTTAACCGGACCCAA" | gawk '
BEGIN{
  FS=""
}
{
  homopolymer = $1;
  base = $1;
  for(i=2; i<=NF; i++){
    if($i == base){
      homopolymer = homopolymer""base;
    }else{
      print homopolymer;
      homopolymer = $i;
      base = $i;
    }
  }
  print homopolymer;
}'
Run Code Online (Sandbox Code Playgroud)

产量

A
CCC
GGG
TTT
AA
CC
GG
A
CCC
AA

如何在awk或sed中使用正则表达式,得到相同的结果?

regex awk sed bioinformatics gawk

2
推荐指数
1
解决办法
322
查看次数

标签 统计

awk ×10

gawk ×10

bash ×3

regex ×3

linux ×2

bioinformatics ×1

cut ×1

nawk ×1

sed ×1

shell ×1

unix ×1