标签: gawk

227
推荐指数
7
解决办法
50万
查看次数

在awk中打​​印第二个最后一列/字段

我想在awk中打​​印第二个最后一列或字段.字段数是可变的.我知道我应该可以使用,$NF但不知道如何使用它.

这似乎不起作用:

awk ' { print ( $NF-- )  } '
Run Code Online (Sandbox Code Playgroud)

awk gawk

157
推荐指数
6
解决办法
13万
查看次数

如何使用shebang(即#!)为awk使用多个参数?

我想用shebang 执行一个gawk脚本--re-interval."幼稚"的方法

#!/usr/bin/gawk --re-interval -f
... awk script goes here
Run Code Online (Sandbox Code Playgroud)

不起作用,因为gawk是用第一个参数调用的"--re-interval -f"(不是在空白处分开),它不明白.有解决方法吗?

当然你可以不直接调用gawk,而是将它包装成一个分割第一个参数的shell脚本,或者创建一个shell脚本,然后调用gawk并将脚本放到另一个文件中,但我想知道是否有某种方法可以做这在一个文件中.

shebang行的行为因系统而异 - 至少在Cygwin中它不会通过空格分割参数.我只关心如何在一个行为类似的系统上做到这一点; 该脚本不是便携式的.

unix shell awk shebang gawk

114
推荐指数
5
解决办法
3万
查看次数

如何使用sed,awk或gawk只打印匹配的内容?

我看到很多关于如何使用sed,awk或gawk进行搜索和替换等操作的示例和手册页.

但在我的情况下,我有一个正则表达式,我想对文本文件运行以提取特定的值.我不想做搜索和替换.这是从bash调用的.我们来举个例子:

正则表达式示例:

.*abc([0-9]+)xyz.*
Run Code Online (Sandbox Code Playgroud)

示例输入文件:

a
b
c
abc12345xyz
a
b
c
Run Code Online (Sandbox Code Playgroud)

听起来很简单,我无法弄清楚如何正确调用sed/awk/gawk.我希望做的是,在我的bash脚本中有:

myvalue=$( sed <...something...> input.txt )
Run Code Online (Sandbox Code Playgroud)

我尝试过的事情包括:

sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file
sed -n 's/.*([0-9]).*/\\1/g' example.txt # extracts nothing
Run Code Online (Sandbox Code Playgroud)

regex unix awk sed gawk

97
推荐指数
5
解决办法
8万
查看次数

awk - 连接两个字符串变量并分配给第三个

在awk中,我有2个字段:1美元和2美元.

它们都是我想要连接并分配给变量的字符串.

awk gawk

55
推荐指数
4
解决办法
12万
查看次数

GNU awk:在替换文本中访问捕获的组

这看起来应该很简单,但awk gensub/gsub/sub行为对我来说一直不清楚,现在我无法让它做文档说应该做的事情(以及有多少经验)其他类似的工具建议应该工作).具体来说,我想从替换字符串中的正则表达式访问"捕获的组".这是我认为awk语法应该是:

awk '{ gsub(/a(b*)c/, "Here are bees: \1"); print; }'
Run Code Online (Sandbox Code Playgroud)

那应该把"abbbc"变成"这里有蜜蜂:bbb".在Ubunutu 9.04中,它至少不适合我.相反,"\ 1"呈现为^ A; 也就是说,代码的字符1.当然不是我想要的.我该怎么做呢?

谢谢.

gawk

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

打印AWK分隔的AWK所有字段

有没有办法打印OFS分隔的所有记录而不输入每个列号.

#Desired style of syntax, undesired result
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-( "}; {print $0}'        
1 2 3 4

#Desired result, undesired syntax
[kbrandt@glade: ~] echo "1 2 3 4" | gawk 'BEGIN { OFS=" :-) "}; {print $1,$2,$3,$4}'
1 :-) 2 :-) 3 :-) 4
Run Code Online (Sandbox Code Playgroud)

awk gawk

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

为什么awk"not in"数组就像awk"in"数组一样工作?

这是一个awk脚本,它尝试根据第一列设置两个文件的差异:

BEGIN{
    OFS=FS="\t"
    file = ARGV[1]
    while (getline < file)
        Contained[$1] = $1
    delete ARGV[1]
    }
$1 not in Contained{
    print $0
}
Run Code Online (Sandbox Code Playgroud)

这是TestFileA:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

这是TestFileB:

ee
cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

但是,当我运行以下命令时:

gawk -f Diff.awk TestFileA TestFileB
Run Code Online (Sandbox Code Playgroud)

我得到的输出就像脚本包含"in"一样:

cat
dog
frog
Run Code Online (Sandbox Code Playgroud)

虽然我不确定"不在"是否是我的意图的正确语法,但我很好奇为什么它的行为与我写"in"时的行为完全相同.

awk gawk

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

使用gawk将每第n行打印成一行

我有一个非常大的文件,我需要获取每个第n行并将其打印成一行.

我的数据:

1      937  4.320194
2      667  4.913314
3      934  1.783326
4      940  -0.299312
5      939  2.309559
6      936  3.229496
7      611  -1.41808
8      608  -1.154019
9      606  2.159683
10     549  0.767828
Run Code Online (Sandbox Code Playgroud)

我希望我的数据看起来像这样:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683
Run Code Online (Sandbox Code Playgroud)

这当然是一个例子,我想要我的巨大数据文件的每10行.到目前为止我试过这个:

 NF == 6 {
     if(NR%10) {print;}
     }
Run Code Online (Sandbox Code Playgroud)

printing awk line gawk

21
推荐指数
3
解决办法
4万
查看次数

是否可以在awk中将项附加到数组而不指定索引?

我意识到awk有关联数组,但我想知道是否有一个等同于此的awk:

http://php.net/manual/en/function.array-push.php

明显的解决方法是说:

array[$new_element] = $new_element
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不那么可读,而且比它需要的更加黑客.

awk gawk

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

标签 统计

gawk ×10

awk ×9

unix ×2

bash ×1

line ×1

printing ×1

regex ×1

sed ×1

shebang ×1

shell ×1