Questions tagged «awk»

AWK是一种文本处理语言。它主要用于处理和处理结构化数据,以及生成报告。

1
使用'if'基于条件运行命令的awk脚本
我这里有一段代码基本上是一个名为'srcip'的文件(它只是一个IP地址列表),并将它与我的'〜/ db'文件进行比较,该文件只是我们拥有的服务器的制表符分隔的IP HOSTNAME数据库在我们的环境中。目标是获取'srcip'文件并将其与〜/ db文件中的内容进行匹配以获取主机名。它运行正常但由于DHCP问题,有很多IP地址故意不在〜/ db文件中,因此我们需要使用该host命令进行真正的主机查找。我想要的是基本上在这个awk代码中放置一个if语句来检查数据库中的IP是否不匹配,然后在该ip上运行host命令并给我输出。我怎么能在这里做到这一点? awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1]!=$2 {print $1, a[$1], $2}' OFS="\t" srcip ~/db 我知道awk可以使用if下面这样的语句来检查是否有任何系统用户有/ bin / bash shell: awk -F':' '{ if ($3 < '500' && $7 != "/bin/bash" ) print $0 }' /etc/passwd 如上所述,我需要使用能够快速解析这些数据的东西,例如awk或sed,而不是依赖任何循环。请记住,我已经可以使用while循环执行此操作但是考虑到while循环的性质,它会逐行解析它并且我们使用起来很慢,因为我们有近100,000个IP可以一次解析(如果不是更多)。对于2000行,我可以运行这段代码但是这不是我想要做的: #!/bin/bash while read this_IP_address do db_host=$(grep "^$this_IP_address" …

3
优化shell和awk脚本
我使用shell脚本,awk脚本和find命令的组合来在数百个文件中执行多个文本替换。文件大小在几百字节到20千字节之间变化。 我正在寻找一种方法来加速这个脚本。 我正在使用cygwin。 shell脚本 - #!/bin/bash if [ $# = 0 ]; then echo "Argument expected" exit 1 fi while [ $# -ge 1 ] do if [ ! -f $1 ]; then echo "No such file as $1" exit 1 fi awk -f ~/scripts/parse.awk $1 > ${1}.$$ if [ …

1
如何使用gsub替换完全匹配的单词
请参阅下面的脚本 - 在此 nawk 'NR==FNR { a[$1]=$2 ; next} {for ( i in a) gsub(i,a[i])}1' file.dat 1.txt 1.TXT ioiufeioru dfoiduf MO_CIF_INP438 fjkdj MO_CIF_INP dsjhdf BP_LINKED_TETES dehdueuh MO_INP_BPRESP FILE.DAT MO_CIF_INP TRO_MO_CIF_INP BP_LINKED_TETES TRO_BP_LINKED_TETES MO_BPID TRO_MO_BPID MO_INP_BPRESP TRO_MO_INP_BPRESP 以及上面脚本的输出是 ioiufeioru dfoiduf TRO_MO_CIF_INP438 fjkdj TRO_MO_CIF_INP dsjhdf TRO_BP_LINKED_TETES dehdueuh TRO_MO_INP_BPRESP 我的意图是只更换匹配的单词,并不是在上面的情况下 MO_CIF_INP438也会被替换。我们如何使用单词搜索?我试过以下情况,但没有工作 1。 nawk …

0
使apt-get更简洁
我在Debian 16.04上构建了一个shell脚本来简化所有更新内容,我经常用它来调用它sudo: apt-get -qy update apt-get -qq upgrade apt-get -qq dist-upgrade apt-get -qq autoremove apt-get -qq autoclean 工作正常; 但这对我的口味来说太冗长了; 我想要的只是任何类型和更新的包的错误列表(如果可能的话,包括更新所需的磁盘空间)。 所以我想要使输出apt-get更简洁或过滤脚本的(德语)输出。 由于我找不到将apt-get输出调整到我的愿望的方法,我想这将是一个输出过滤器。但我完全不知所措awk。 旁注: 我对英语输出很满意。我是否正确地假设添加export LC_ALL=C到脚本的开头会实现这一点?
debian  awk  apt 

2
AWK格式化磁盘工具命令格式不正确
我正在尝试学习awk,所以我在disk utility命令上尝试。 这是我跑步时的输出 Disk Utility list disk0 / dev / disk0(内部,物理): #:TYPE NAME SIZE IDENTIFIER 0:GUID_partition_scheme * 251.0 GB disk0 1:EFI EFI 209.7 MB disk0s1 2:Apple_HFS Macintosh HD 145.4 GB disk0s2 3:Apple_Boot Recovery HD 650.0 MB disk0s3 4:Linux Filesystem 48.0 GB disk0s4 5:Microsoft Basic Data WINDOWS 38.0 GB disk0s5 6:Linux交换18.8 …

1
“找到| grep | awk“很糟糕。”
我正在扫描我服务器上的所有shell脚本,并通过以下命令执行此操作: find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript" 这工作正常,这是一个示例输出: /lib/udev/hwclock-set: text/x-shellscript /lib/init/bootclean.sh: text/x-shellscript /etc/network/if-up.d/openssh-server: text/x-shellscript /etc/network/if-up.d/mountnfs: text/x-shellscript 现在,我想处理文件名,并尝试使用awk: find / -type f -exec file --mime-type {} \; | grep "text/x-shellscript" | awk -F: '{ print $1 }' 但是,这不会产生任何输出。我曾尝试重定向管道等,但在这里我已经碰壁了。 任何人都知道我做错了什么?
bash  find  grep  pipe  awk 

1
awk + ​​sed +匹配复杂字符串
我需要有用的命令来将字符串“ / pci ... / pci ... / pci .... / scsi .... / disk ...”与awk或sed匹配?(我需要将此命令放入我的ksh脚本中) 备注1 [...]可以是任何字符串,“ pci pci pci scsi disk”是默认字符串。备注2我有Solaris计算机,因此语法应适合Solaris 例 prtpicl -v |grep :disk0 | awk '{print $2}' 给输出 /pci@0/pci@0/pci@2/scsi@0/disk@0
linux  sed  perl  solaris  awk 


1
如何在linux中显示一行中的特定部分?
假设我有一个包含以下行的文件: [{"name”:”10.0.0.1”,”address":"10.0.0.1”,”subscriptions["all"],"version":"0.0.0”,”timestamp":1450270166},{"name":"10.0.0.2","address":"10.0.0.2","subscriptions":["all"],"version”:”0.0.0”,”timestamp":1450390819}] 在这里,我需要得到类似的输出 name:10.0.0.1 name:10.0.0.2 任何的想法?
-1 linux  command-line  bash  sed  awk 

1
如何根据子字符串过滤唯一行?
如果文件中有一组URL,例如: http://example.com/do?foo=bar&etc=123 http://example.com/do?etc=456&foo=bar 我想将其过滤掉,以便“ foo”参数的每个唯一值只有一个网址。URL的其余部分无关紧要,对我来说唯一重要的是,我没有两行或更多行具有相同的'foo'值。
-1 linux  unix  sed  awk  uniq 

2
尝试使用awk计算和打印歌曲文件名
RANK NAME BAND YEAR GENERE DOMESTIC/INTERNATIONAL 206:Reach Out, I'll Be There:The Four Tops:1978:Pop:3/2 207:Bye Bye Love:The Everly Brothers:1950:Classic:3/2 208:Gloria:Them:1965:Classic:1/1 209:In My Room:The Beach Boys:1985:Classic:5/7 210:96 Tears:? & the Mysterians:1964:Classic:20/15 211:Caroline, No:The Beach Boys:1975:Classic:5/7 212:1999:Prince:1958:Classic:5/7 213:Your Cheatin' Heart:Hank Williams:1988:Soul:7/6 214:Rockin' in the Free World:Neil Young:1960:Pop:5/7 215:Sh-Boom:The Chords:1967:Alternative:3/2 216:Do You Believe in …
-2 unix  shell  grep  sed  awk 

1
使用nawk,如何打印包含四个字符的所有名字?
使用nawk,如何打印包含四个字符的所有名字? 我尝试了nawk'/ ^ [[:alpha:]] {4} / {print $ 1}'输入文件,但没有工作 Mike Harrington:(510)548-1278:250:100:175 Christian Dobbins:(408)538-2358:155:90:201 Susan Dalsass:(206)654-6279:250:60:50 Jody Savage:(206)548-1278:15:188:150 Chet Main:(510)548-5258:50:95:135 汤姆萨维奇:(408)926-3456:250:168:200
-3 linux  awk 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.