标签: awk

还有什么理由去学习AWK吗?

我不断学习新工具,甚至是老式工具,因为我喜欢使用正确的解决方案解决问题.

不过,我想知道是否还有任何理由去学习其中的一些.awk例如是对我有意思,但对于简单的文本处理,我可以使用grep,cut,sed等而复杂的,我会去为Python.

现在我并不是说它不是一个强大而方便的工具.但是,由于学习新工具需要时间和精力,值得吗?

awk text-processing

103
推荐指数
11
解决办法
3万
查看次数

使用awk删除字节顺序标记

awk用于删除BOM的脚本(可能是单线程)怎么样?

规格:

  • 在第一个(NR > 1)之后打印每一行
  • 对于第一行:如果以#FE #FF或开头#FF #FE,则删除它们并打印其余部分

unicode awk byte-order-mark

102
推荐指数
4
解决办法
8万
查看次数

awk打印列$ 3如果$ 2 ==具体值?

我正在从awk编程语言中学习awk,并被这个例子所困扰.

如果我想打印$ 3,如果$ 2等于一个值(例如'1'),我正在使用这个命令工作正常:

awk '$2==1 {print $3}' <infile> | more
Run Code Online (Sandbox Code Playgroud)

但是当我用另一个搜索条件替换1时,例如'findtext',这个命令不起作用.

awk '$1== findtext {print $3}' <infile> | more
Run Code Online (Sandbox Code Playgroud)

这没有返回任何输出,我确定我放在'findtext'中的内容存在于那个地方.我的语法有什么问题吗?

我试过这个,但它不起作用:

awk '$1== "findtext" {print $3}' <infile> | more
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做

1 11 0.959660297 0 0.021231423 -0.0073 -0.0031 MhZisp
2 14 0.180467091 0.800424628 0 0.0566 0.0103 ClNonZ
3 19 0.98089172 0 0 -0.0158 0.0124 MhNonZ
4 15 0.704883227 0.265392781 0.010615711 -0.0087 -0.0092 MhZisp
5 22 0.010615711 0.959660297 0.010615711 0.0476 0.0061 ClNonZ
6 23 0.715498938 0 0.265392781 -0.0013 -0.0309 Unkn
7 …
Run Code Online (Sandbox Code Playgroud)

linux shell awk

101
推荐指数
4
解决办法
26万
查看次数

如何使用awk打印最后两列

我想要的只是打印的最后两列.

awk

100
推荐指数
3
解决办法
18万
查看次数

如何删除jq输出中的双引号以解析bash中的json文件?

我使用JQ解析一个JSON文件,如这里.但是,字符串值的结果包含预期的"双引号",如下所示:

$ cat json.txt | jq '.name'
"Google"
Run Code Online (Sandbox Code Playgroud)

如何将此管道传输到另一个命令以删除""?所以我明白了

$ cat json.txt | jq '.name' | some_other_command
Google
Run Code Online (Sandbox Code Playgroud)

some_other_command可以用什么?

bash awk sed jq

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

如何使用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万
查看次数

bash将文件内容附加到现有文件的底部

可能重复:
用于将文本附加到每个文件的Shell脚本?
如何在SHELL脚本中将输出附加到文本文件的末尾?

我正在尝试找出将api详细信息插入到预先存在的配置中的最佳方法.我想过sed用于将api文本文件的内容插入config.inc文件的底部.我已经启动了脚本,但它不起作用,它擦除了文件.

#!/bin/bash

CONFIG=/home/user/config.inc
API=/home/user/api.txt

sed -e "\$a $API" > $CONFIG
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

bash awk sed append

97
推荐指数
1
解决办法
16万
查看次数

使用awk打印除第一个字段以外的所有内容

我有一个看起来像这样的文件:

AE  United Arab Emirates
AG  Antigua & Barbuda
AN  Netherlands Antilles
AS  American Samoa
BA  Bosnia and Herzegovina
BF  Burkina Faso
BN  Brunei Darussalam
Run Code Online (Sandbox Code Playgroud)

我想颠倒订单,先打印除1美元以外的所有商品,然后再打印1美元:

United Arab Emirates AE
Run Code Online (Sandbox Code Playgroud)

我怎么能做"除了场1之外的一切"技巧?

perl awk sed

96
推荐指数
7
解决办法
11万
查看次数

如何逃避awk中的单引号

我想做以下事情

awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'
Run Code Online (Sandbox Code Playgroud)

但是以这种方式逃避单引号是行不通的

awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'
Run Code Online (Sandbox Code Playgroud)

这该怎么做?感谢帮助.

awk

95
推荐指数
5
解决办法
10万
查看次数

如何使用awk打印匹配的正则表达式?

使用awk,我需要在文件中找到与正则表达式匹配的单词.

只是想打印与模式匹配的单词.

所以,如果在线,我有:

xxx yyy zzz
Run Code Online (Sandbox Code Playgroud)

和模式:

/yyy/
Run Code Online (Sandbox Code Playgroud)

我想只得到:

yyy
Run Code Online (Sandbox Code Playgroud)

编辑:感谢kurumi我设法写这样的东西:

awk '{
        for(i=1; i<=NF; i++) {
                tmp=match($i, /[0-9]..?.?[^A-Za-z0-9]/)
                if(tmp) {
                        print $i
                }
        }
}' $1
Run Code Online (Sandbox Code Playgroud)

这就是我需要的:)非常感谢!

regex awk

94
推荐指数
7
解决办法
41万
查看次数

标签 统计

awk ×10

sed ×4

bash ×2

regex ×2

append ×1

byte-order-mark ×1

gawk ×1

jq ×1

linux ×1

perl ×1

shell ×1

text-processing ×1

unicode ×1

unix ×1