标签: nawk

使用sed,awk或perl从行中提取特定模式

sed如果我需要提取由特定模式包围的模式(如果它存在于一行中),我可以使用吗?

假设我有一个包含以下行的文件:

有许多人不敢为邻居所说的[/恐惧/]而自杀.

当我们已经知道/*答案时,建议就是我们所要求的,*/但希望我们没有.

在这两种情况下,我必须扫描线以获得第一个出现的模式,即在各自的情况下为"[ //*",并存储以下模式,直到分别退出模式,即' /]'或' */.

简而言之,我需要fearanswer.如果可能,可以扩展多行;从某种意义上说,如果退出模式出现在不同于同一行的行中.

欢迎以建议或算法的形式提供任何形式的帮助.在此先感谢您的回复

perl awk grep sed nawk

7
推荐指数
1
解决办法
2347
查看次数

grep regex to perl或awk

我一直在使用Linux env,最近迁移到solaris.不幸的是我的bash脚本中的一种需要使用grepP开关[PCRE支持].作为的Solaris犯规支持pcre的grep的选项,我不得不另寻解决的问题; pcregrep似乎有一个明显的循环错误和 sed -r选项是不支持!我希望使用perlnawk将解决solaris上的问题.

我还没有perl在我的脚本中使用它并不知道它的语法和标志.

既然是pcre,我beleive,一个perl编剧可以帮我在几分钟之内.它们应匹配多行.

在效率awkperl解决方案方面哪一个是更好的解决方案?

谢谢你的回复.

perl awk pcre solaris nawk

7
推荐指数
1
解决办法
1701
查看次数

以awk模式更改正则表达式分隔符

是否可以将默认的正则表达式分隔符(斜杠)更改为其他字符?

我尝试使用sed语法来实现它,但它没有用.

$ gawk '\|bash| { print } ' backup.sh
gawk: |bash| { print }
gawk: ^ syntax error
Run Code Online (Sandbox Code Playgroud)

我正在尝试的正则表达式有很多斜线.逃离所有这些将使它变得丑陋和难以理解.我尝试将/更改为 但它不起作用.

TIA

regex awk gawk nawk

6
推荐指数
1
解决办法
1223
查看次数

在AWK中分离输出记录而不使用尾随分隔符

我有以下记录:

31 Stockholm
42 Talin
34 Helsinki
24 Moscow
15 Tokyo
Run Code Online (Sandbox Code Playgroud)

我想用AWK将它转换为JSON.使用此代码:

#!/usr/bin/awk
BEGIN {
    print "{";
    FS=" ";
    ORS=",\n";
    OFS=":";
};

{    
    if ( !a[city]++ && NR > 1 ) {
        key = $2;
        value = $1;
        print "\"" key "\"", value;
    }
};

END {
    ORS="\n";
    OFS=" ";
    print "\b\b}";
};
Run Code Online (Sandbox Code Playgroud)

给我这个:

{
"Stockholm":31,
"Talin":42,
"Helsinki":34,
"Moscow":24,
"Tokyo":15, <--- I don't want this comma
}
Run Code Online (Sandbox Code Playgroud)

问题是在最后一条数据行上尾随逗号.它使JSON输出不可接受.我怎样才能得到这个输出:

{
"Stockholm":31,
"Talin":42,
"Helsinki":34,
"Moscow":24,
"Tokyo":15
}
Run Code Online (Sandbox Code Playgroud)

awk json gawk nawk

5
推荐指数
1
解决办法
2022
查看次数

Awk和多文件处理可能吗?

我需要处理两个文件内容.我想知道我们是否可以使用一个nawk声明来解决它.

文件A内容:

AAAAAAAAAAAA  1
BBBBBBBBBBBB  2
CCCCCCCCCCCC  3
Run Code Online (Sandbox Code Playgroud)

文件B内容:

XXXXXXXXXXX  3
YYYYYYYYYYY  2
ZZZZZZZZZZZ  1
Run Code Online (Sandbox Code Playgroud)

我想比较,如果$2(第二场)在文件中的是相反$2的文件B.我不知道如何写规则NAWK多文件处理?我们如何将A $2与B 区分开来$2

编辑:我需要将A的第一行(即1)的2美元与B的最后一行(再次为1)的2美元进行比较.然后比较A中第2行的2美元和第2行的第2行中的2美元.等.....

unix file-io awk ksh nawk

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

将行转换为unix中的列

我有输入文件,如下所示

输入文件

10,9:11/61432568509
118,1:/20130810014023
46,440:4/GTEL
10,9:11/61432568509
118,1:/20130810014023
46,440:4/GTEL
Run Code Online (Sandbox Code Playgroud)

我正在寻找的输出.

10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
10,9:11/61432568509,118,1:/20130810014023,46,440:4/GTEL
Run Code Online (Sandbox Code Playgroud)

我尝试过使用awk命令,但我没有获得所需的输出.任何人都可以帮助我吗?

awk -F"" '{a[$1]=a[$1]FS$2}END{for(i in a) print i,a[i]}' inputfile
Run Code Online (Sandbox Code Playgroud)

unix linux awk solaris nawk

4
推荐指数
1
解决办法
9114
查看次数

删除第N次出现后的内容使用单行

我想删除在第四次出现的字符":"之后的任何字段中包含它.看例子:

输入:

1 10975     A C    1/1:137,105:245:99:1007,102,0   0/1:219,27:248:20:222,0,20 
1 19938     T TA   ./.                             1/1:0,167:167:99:4432,422,0,12,12
12 20043112 C G    1/2:3,5,0:15:92                 2/2:3,15:20:8
Run Code Online (Sandbox Code Playgroud)

预期产量:

1 10975     A C    1/1:137,105:245:99   0/1:219,27:248:20 
1 19938     T TA   ./.                  1/1:0,167:167:99
12 20043112 C G    1/2:3,5,0:15:92      2/2:3,15:20:8
Run Code Online (Sandbox Code Playgroud)

所以基本上任何具有":"的字段都应该被删除.请注意,第三行没有任何变化,因为":"仅出现三次.我试过并找到了一个解决方案(不好),它不仅适用于第一行而不适用于secod,因为它有更多的逗号","

不完整的解决方案:

sed 's/:[0-9]*,[0-9]*,[0-9]*//g'
Run Code Online (Sandbox Code Playgroud)

提前致谢

perl awk sed gawk nawk

4
推荐指数
1
解决办法
316
查看次数

如何从重复六次以上的文件中打印行

我有一个包含下面显示的数据的文件.第一个以逗号分隔的字段可以重复任意次,并且我想在第六次重复此字段的任何值后仅打印行

例如,有八个字段1111111作为第一个字段,我想只打印这些记录的第七个和第八个

输入文件:

1111111,aaaaaaaa,14
1111111,bbbbbbbb,14
1111111,cccccccc,14
1111111,dddddddd,14
1111111,eeeeeeee,14
1111111,ffffffff,14
1111111,gggggggg,14
1111111,hhhhhhhh,14
2222222,aaaaaaaa,14
2222222,bbbbbbbb,14
2222222,cccccccc,14
2222222,dddddddd,14
2222222,eeeeeeee,14
2222222,ffffffff,14
2222222,gggggggg,14
3333333,aaaaaaaa,14
3333333,bbbbbbbb,14
3333333,cccccccc,14
3333333,dddddddd,14
3333333,eeeeeeee,14
3333333,ffffffff,14
3333333,gggggggg,14
3333333,hhhhhhhh,14
Run Code Online (Sandbox Code Playgroud)

输出:

1111111,gggggggg,14
1111111,hhhhhhhh,14
2222222,gggggggg,14
3333333,gggggggg,14
3333333,hhhhhhhh,14
Run Code Online (Sandbox Code Playgroud)

我试过的是相对于1st转换第2和第3个字段,以便我可以nawk$7或的字段上使用$8

#!/usr/bin/ksh awk -F"," '{ a[$1]; b[$1]=b[$1]","$2 c[$1]=c[$1]","$3} END{ for(i in a){ print i","b[i]","c[i]} } ' file > output.txt
Run Code Online (Sandbox Code Playgroud)

unix perl awk nawk

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

来自awk和nawk的不同结果

我刚刚在一个有大约2.5亿条记录的文件上运行这两个命令.

awk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
Run Code Online (Sandbox Code Playgroud)

nawk '{if(substr($0,472,1)=="9") print $0}' < file1.txt >> file2.txt
Run Code Online (Sandbox Code Playgroud)

记录长度为482.第一个命令在file2.txt中给出了正确的记录数,即; 6000万,但nawk命令只提供420万.

我很困惑,想知道是否有人遇到过这样的问题.这个简单的命令究竟是如何在内部以不同的方式处理的?有一个缓冲区在使用nawk时只能容纳一定数量的字节吗?

如果有人可以对此有所了解,我将不胜感激.

我的OS详细信息是

SunOS <hostname> 5.10 Generic_147148-26 i86pc i386 i86pc
Run Code Online (Sandbox Code Playgroud)

unix awk nawk

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

如何用awk处理3个文件?

好的,所以花了两天后,我无法解决它,现在我几乎没时间了.这可能是一个非常愚蠢的问题,所以请耐心等待.我的awk脚本做了这样的事情:

BEGIN{ n=50; i=n; }
FNR==NR {
            # Read file-1, which has just 1 column
            ids[$1]=int(i++/n);
            next
        }
        {
            # Read file-2 which has 4 columns
            # Do something
            next
        }
 END {...}
Run Code Online (Sandbox Code Playgroud)

它工作正常.但现在我想将它扩展为3个文件.比方说,我不需要硬编码"n"的值,而是需要读取属性文件并从中设置值"n".我发现了这个问题,尝试过这样的事情:

BEGIN{ n=0; i=0; }
FNR==NR {
            # Block A
            # Try to read file-0
            next
        }
        {
            # Block B
            # Read file-1, which has just 1 column
            next
        }
        {
            # Block C
            # Read file-2 which has 4 columns
            # Do something …
Run Code Online (Sandbox Code Playgroud)

awk gawk nawk

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

退出 awk 函数

如何退出 awk 函数?“exit”停止整个程序?

scripting awk exit nawk

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

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

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

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

但有更好的方法吗?

linux bash awk gawk nawk

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

awk在数组中设置元素

我有一个大的.csv文件要处理,我的元素是随机排列的,如下所示:

XXXXXX,XX, ,MLOCAL,MREMOTE,33222,,56 XXXXXX,XX, ,,,,, XXXXXX,XX, ,, XXXXXX,XX, ,, XXXXXX,XX, ,,,,, XXXXXX,XX, ,,,,, XXXXXX, XX, ,,22/10/201218/10/2012MREMOTEMLOCAL332225622/10/201218/10/2012MLOCAL34199322/10/2012
MREMOTE935682808/10/2012
LOCALREMOTE193161525322/10/201222/10/2012
REMOTELOCAL186587138366622/10/201222/10/2012
REMOTE118030613419/10/2012

其中字段LOCAL,REMOTE,MLOCALMREMOTE显示等:

  1. 当它们显示为成对(LOCAL/REMOTE)时,如果第3个字段是MLOCAL,第4个字段是MREMOTE,则第5个第7个字段表示值和日期MLOCAL …

csv awk if-statement case nawk

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

标签 统计

awk ×13

nawk ×13

gawk ×5

perl ×4

unix ×4

linux ×2

sed ×2

solaris ×2

bash ×1

case ×1

csv ×1

exit ×1

file-io ×1

grep ×1

if-statement ×1

json ×1

ksh ×1

pcre ×1

regex ×1

scripting ×1