鉴于以下输入:
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.
我正在审查其他人在工作中编写的一些bash脚本,我发现这条线我正在努力理解
[[ $(awk 'BEGIN{print ('$CAPACITY'>=0.9)}') -eq 1 ]] && echo "Capacity at 90 Percent"
Run Code Online (Sandbox Code Playgroud)
我的理解是这一行正在取代if语句.有人可以帮我解释一下这条线的真正作用.谢谢
我有一个文件:
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) 我有一些名为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) 这是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
我正在扫描格式如下的日志文件:
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 个小时?
我不知道为什么我无法遍历所有记录。目前它用于最后一条记录并为其打印规范化。
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) 我对这样一个基本的问题表示歉意,但我正在尝试使用 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 个空行。
谢谢。
我试图在记录中附加一个数字,表示文件中特定列中特定值发生了多少次.例如,假设我的文件如下所示:
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可能是处理这个问题的好方法.
我正在尝试使用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)
有人能协助我吗?