使用GnuWin32中包含的gawk for Windows,如何将文件名附加到文本文件?
这是我想要的一个例子:
Filename -> text.txt
"aaaa","bbbb","c"
Run Code Online (Sandbox Code Playgroud)
结果应该是:
"aaaa","bbbb","c","text.txt"
Run Code Online (Sandbox Code Playgroud) 如何在awk中对数字数组进行排序?考虑“ sortNum.awk”:
{
split($0,a," ")
for (i in a) print a[i]
print "####"
asort(a)
for (i in a) print a[i]
}
Run Code Online (Sandbox Code Playgroud)
与echo "4 3 2 1" | awk -f sortNum.awk给予
1
4
3
2
####
4
1
2
3
Run Code Online (Sandbox Code Playgroud)
我正在使用GNU Awk版本3.1.8。
我的数据看起来像:
1 161 a
1 48 b
1 30 c
2 199 d
2 1306 d
2 1290 d
2 81 d
2 51 e
2 82 e
2 93 e
3 64 e
3 99 f
3 123 f
Run Code Online (Sandbox Code Playgroud)
对于第三列中的每个值,我想选择第 2 列中具有最大值的行并按第 1 列分组。所以所需的输出是
1 161 a
1 48 b
1 30 c
2 1306 d
2 93 e
3 64 e
3 123 f
Run Code Online (Sandbox Code Playgroud)
按第一列分组我的意思是我想要第一列中所有不同值的结果。我尝试使用的是
awk '$2>max[$3]{max[$3]=$2; row[$3]=$0} END{for (i in row) print row[i]}' file
Run Code Online (Sandbox Code Playgroud)
我得到以下结果
1 161 …Run Code Online (Sandbox Code Playgroud) 我有一个这样的 CSV:
1,"Paris","3.57"
10,"Singapore","3.57"
211,"Sydney","3.28"
324,"Toronto Center","3.33"
Run Code Online (Sandbox Code Playgroud)
我想用零填充第一列以获得:
001,"Paris","3.57"
010,"Singapore","3.57"
211,"Sydney","3.28"
324,"Toronto Center","3.33"
Run Code Online (Sandbox Code Playgroud)
printf我尝试将第一列分配给awk的输出:
awk '{ $1 = printf("%03d", $1); print }' my.csv
Run Code Online (Sandbox Code Playgroud)
但它给了我一个语法错误:
awk: cmd. line:1: { $1 = printf("%03d", $1); print }
awk: cmd. line:1: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
如果我引用 printf 函数,它也不起作用。
我怎么能这么做呢?
我的文件data.txt包含以下包含数百万行的记录结构:
13
12
11
8
4
3
2
1
1
1
Run Code Online (Sandbox Code Playgroud)
对于该列的每个值,我需要计算其 PERCENTRANK(这是数据集中某个值占数据集百分比的排名)。
计算数据集中任意值 X 的 PERCENTRANK 的公式为
= number of values less than X / (Number of values less than X + Number of Values greater than X)
Run Code Online (Sandbox Code Playgroud)
因此,对于数据集中的每个值 X,程序必须循环遍历所有记录,以查找同一数据集中小于和大于 X 的值的数量。
如何使用“awk”重复循环文件来计算所有 X 值的 PERCENTRANK 来实现这一点?
预期输出:
X PERCENTRANK
13 1.0000
12 0.8888
11 0.7777
8 0.6666
4 0.5555
3 0.4444
2 0.3333
1 0.0000
1 0.0000
1 0.0000
Run Code Online (Sandbox Code Playgroud)
2 的 PERCENTRANK 为 0.333,因为集合中的三个值小于 2,六个值大于 2。 …
我在CentOS中运行一个命令,它给了我一个字符串的输出,我想获取该输出的某个部分并将其设置为变量.
我运行命令ebi-describe-env.
我的输出如下:
ApplicationName | CNAME | DATECreated | DateUpdated | Description | EndpointURL |
EnvironmentID | EnvironmentName | Health | Stack | Status | TemplateName |
Version Label --------------------------
Web App | domain.com | 2012-02-23 | 2012-08-31 | |
anotherdomain.com | e-8sgkf3eqbj | Web-App-Name | Status |
Linux | Ready | N/A | 20120831 - daily
Run Code Online (Sandbox Code Playgroud)
我想抓住20120831 - daily字符串的' '部分(此字符串将始终更改但保持在同一位置)并将其设置为变量.
原来我以为我可以使用grep或sed并在每个'|'之后打印一行 并将第13行设置为变量.
我是新手来编写脚本,所以任何帮助都会很棒.谢谢.
有人可以帮我使用awk进行解析吗?
对不起,我没有任何代码我的输入空格分隔文本文件(该文件在项目行中还有一些字段)
category is fruits
item id 8837878
item id 8837879
item id 8837880
item id 8837881
item id 8837882
item id 8837883
item id 8837884
item id 8837885
item id 8837886
item id 8837887
item id 8837888
item id 8837889
category is veg
item id 8837890
item id 8837891
item id 8837892
item id 8837893
item id 8837894
item id 8837895
item id 8837896
item id 8837897
Run Code Online (Sandbox Code Playgroud)
必需的制表符分隔输出文件
fruits item id 8837878
fruits item id 8837879
fruits item id …Run Code Online (Sandbox Code Playgroud) 这是我的代码片段:
gsub(/'/, "'", name)
gsub(/</, "<", name)
gsub(/>/, ">", name)
gsub(/&/, "&", name)
Run Code Online (Sandbox Code Playgroud)
我想,以取代4个字符:"<>&,但它不工作我喜欢的方式,例如:我想更换<到<和它给了我这样的:<lt;
这有什么解决方案吗?
此脚本从第一列中查找重复条目,并从第二列组中打印条目.我想知道脚本是如何实现这一点的.
awk '{c[$1]++; k[$1]=k[$1] " " $2} END {for (i in c) {if (c[i]>1) print k[i]}}'
Run Code Online (Sandbox Code Playgroud) 好的,所以我有,例如,
Email:Phone:Name
Email2:Phone2:Name2
Run Code Online (Sandbox Code Playgroud)
(3栏)
但是有些行只包含2列示例,
Email3:Phone3
Run Code Online (Sandbox Code Playgroud)
注意#3不包含名称/第3列
问题是如何删除仅包含2列的行.