标签: gawk

打印实际的字段分隔符值而不是正则表达式

鉴于以下输入:

check1;check2
check1;;check2
check1,check2
Run Code Online (Sandbox Code Playgroud)

awk命令:

awk -F';+|,' '{print $1 FS $2}'
Run Code Online (Sandbox Code Playgroud)

FS 应该包含选定的分隔符?

如何打印选定的分隔符,描述分隔符的正则表达式之一;,;;或者,不是.

如果输入check1;check2则输出应该是check1;check2.

regex awk gawk delimiter

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

AWK如何取代IF?

我正在审查其他人在工作中编写的一些bash脚本,我发现这条线我正在努力理解

[[ $(awk 'BEGIN{print ('$CAPACITY'>=0.9)}') -eq 1 ]] && echo "Capacity at 90 Percent"
Run Code Online (Sandbox Code Playgroud)

我的理解是这一行正在取代if语句.有人可以帮我解释一下这条线的真正作用.谢谢

linux bash awk gawk

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

AWK解释示例

我有一个文件:

AWK question about the example
Run Code Online (Sandbox Code Playgroud)

这个命令效果很好:

awk  '{ gsub(/...../, "&\n" ) ; print}' file
AWK q
uesti
on ab
out t
he ex
ample
Run Code Online (Sandbox Code Playgroud)

为什么这个命令不会打印相同的结果?

awk  '{ gsub(/.{5}/, "&\n" ) ; print}' file
AWK question about the example
Run Code Online (Sandbox Code Playgroud)

为什么这个命令不会打印相同的结果?

awk -v WIDTH=5 '{ gsub(".{"WIDTH"}", "&\n"); print }' file
AWK question about the example
Run Code Online (Sandbox Code Playgroud)

awk gawk

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

计算每个文件中的唯一编号

我有一些名为file1,file2,file3 ......等文件.这些文件位于文件夹f1中.文件内容如下所示.我想计算每个文件中唯一的第一列对.有些文件没有数据.它打印为零.我怎么能用awk做到这一点?您的建议将不胜感激.

文件1

 1586-1081 1586 1081 B-A NZ-OD1 3.01273
 1586-1081 1586 1081 B-A NZ-OD2 2.69347
 1589-1100 1589 1100 B-A NH1-OE1 3.80491
 1589-1085 1589 1085 B-A NH2-OE2 2.7109
Run Code Online (Sandbox Code Playgroud)

文件2

 43-415 43 415 B-A OE1-NH1 2.84503
 43-415 43 415 B-A OE1-NH2 2.99614
Run Code Online (Sandbox Code Playgroud)

期望的输出

 file1  3
 file2  1 
Run Code Online (Sandbox Code Playgroud)

awk gawk

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

awk 子串单个字符

这是columns.txt

aaa bbb 3
ccc ddd 2
eee fff 1
3   3   g
3   hhh i
jjj 3   kkk
ll  3   mm
nn  oo  3
Run Code Online (Sandbox Code Playgroud)

我可以找到第二列以“b”开头的行:

awk '{if(substr($2,1,1)=="b") {print $0}}' columns.txt
Run Code Online (Sandbox Code Playgroud)

我可以找到第二列以“bb”开头的行:

awk '{if(substr($2,1,2)=="bb") {print $0}}' columns.txt
Run Code Online (Sandbox Code Playgroud)

为什么哦为什么我找不到第二列中第二个字符是“b”的行?:

awk '{if(substr($2,2,2)=="b") {print $0}}' columns.txt 
Run Code Online (Sandbox Code Playgroud)

awk -W version== GNU Awk 3.1.8

linux bash awk substring gawk

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

如何在 gawk 中将日期字符串转换为时间戳?

我正在扫描格式如下的日志文件:

76.69.120.244 - - [09/Jun/2015:17:13:18 -0700] "GET /file.jpg HTTP/1.1" 200 22977 "http://example.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "16543" "ewr1" "0.002" "CA" "Bell Canada" "2"
76.69.120.244 - - [09/Jun/2015:17:13:19 -0700] "GET /differentfile.bin HTTP/1.1" 206 453684 "http://example.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36" "16543" "ewr1" "1.067" "CA" "Bell Canada" "2"
Run Code Online (Sandbox Code Playgroud)

在 gawk 内部,我使用以下方法获取请求时间:

requesttime=$4;
Run Code Online (Sandbox Code Playgroud)

对我来说,将其解析为基于 UTC/GMT 的时间(最好是纪元时间戳)的最佳方法是什么?

如果有帮助的话,我至少可以保证它会在-0700;也许某种丑陋的字符串转换来添加这 7 个小时?

bash awk gawk

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

使用 AWK 的 Min-Max 归一化

我不知道为什么我无法遍历所有记录。目前它用于最后一条记录并为其打印规范化。

归一化公式:

New_Value = (value - min[i]) / (max[i] - min[i])

程序

{
    for(i = 1; i <= NF; i++)
    {
        if (min[i]==""){  min[i]=$i;}     #initialise min
        if (max[i]==""){  max[i]=$i;}     #initialise max
        if ($i<min[i]) {  min[i]=$i;}     #new min
        if ($i>max[i]) {  max[i]=$i;}     #new max
    }

}
END {
    for(j = 1; j <= NF; j++)
        {
        normalized_value[j] = ($j - min[j])/(max[j] - min[j]);
        print $j, normalized_value[j];
    }
}
Run Code Online (Sandbox Code Playgroud)

数据集

4 14 24 34
3 13 23 33 
1 11 21 31 …
Run Code Online (Sandbox Code Playgroud)

bash shell awk text-processing gawk

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

使用 awk 查找文件中的空行

我对这样一个基本的问题表示歉意,但我正在尝试使用 awk 计算文本文件中的空白行数。这不是家庭作业。Windows 10.Gawk 4.1.3

BEGIN { x=0 } 
/^$/  { x=x+1 } 
END   { print "I found " x " blank lines." }
Run Code Online (Sandbox Code Playgroud)

输出始终是:我发现 0 个空行。

谢谢。

awk gawk

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

如何使用awk附加字段的出现?

我试图在记录中附加一个数字,表示文件中特定列中特定值发生了多少次.例如,假设我的文件如下所示:

John,Guitar
John,Vocals
John,Piano
Paul,Bass
Paul,Vocals
George,Guitar
George,Vocals
Ringo,Drums
Run Code Online (Sandbox Code Playgroud)

我想要的是输出一个如下所示的文件:

John,Guitar,1
John,Vocals,2
John,Piano,3
Paul,Bass,1
Paul,Vocals,2
George,Guitar,1
George,Vocals,2
Ringo,Drums,1
Run Code Online (Sandbox Code Playgroud)

我如何在awk中实现这一目标?我也会接受使用shell脚本或sed的答案,因为我只是猜测awk可能是处理这个问题的好方法.

bash shell awk sed gawk

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

用于更新xml值的脚本


我正在尝试使用AWK脚本根据条件对xml文件进行更新.有人可以帮我吗?

students.xml

<students>
    <student>
        <stuId>1</stuId>
        <name>A</name>
        <mark>75</mark>
        <result></result>
    </student>
    <student>
        <stuId>2</stuId>
        <name>B</name>
        <mark>35</mark>
        <result></result>
    </student>
    <student>
        <stuId>1</stuId>
        <name>C</name>
        <mark>94</mark>
        <result></result>
    </student>
</students>
Run Code Online (Sandbox Code Playgroud)

我到目前为止尝试的代码

我可以使用下面的代码提取标签值

BEGIN { RS="<[^>]+>" } 
{ print  RT, $0 }
Run Code Online (Sandbox Code Playgroud)

这将按预期打印所有标记和值.

我想更新<result>标记为通过,如果标记> 40别的失败

产量

<students>
    <student>
        <stuId>1</stuId>
        <name>A</name>
        <mark>75</mark>
        <result>pass</result>
    </student>
    <student>
        <stuId>2</stuId>
        <name>B</name>
        <mark>35</mark>
        <result>fail</result>
    </student>
    <student>
        <stuId>1</stuId>
        <name>C</name>
        <mark>94</mark>
        <result>pass</result>
    </student>
</students>
Run Code Online (Sandbox Code Playgroud)

有人能协助我吗?

xml linux xslt awk gawk

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

标签 统计

awk ×10

gawk ×10

bash ×5

linux ×3

shell ×2

delimiter ×1

regex ×1

sed ×1

substring ×1

text-processing ×1

xml ×1

xslt ×1