我不断学习新工具,甚至是老式工具,因为我喜欢使用正确的解决方案解决问题.
不过,我想知道是否还有任何理由去学习其中的一些.awk例如是对我有意思,但对于简单的文本处理,我可以使用grep,cut,sed等而复杂的,我会去为Python.
现在我并不是说它不是一个强大而方便的工具.但是,由于学习新工具需要时间和精力,值得吗?
我正在从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) 我使用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可以用什么?
我看到很多关于如何使用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) 我正在尝试找出将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)
我究竟做错了什么?
我有一个看起来像这样的文件:
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之外的一切"技巧?
我想做以下事情
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,我需要在文件中找到与正则表达式匹配的单词.
我只是想打印与模式匹配的单词.
所以,如果在线,我有:
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)
这就是我需要的:)非常感谢!