Questions tagged «awk»

一种模式导向的扫描和处理语言。


5
连接具有唯一标识符的两个文件
我要加入两个文件,分别有大约12900和4400个条目。这些文件包含全球所有陆基气象观测站的位置信息。最大的文件每两周更新一次,较小的文件大约一年一次。原始文件可以在这里找到(http://www.wmo.int/pages/prog/www/ois/volume-a/vola-home.htm和 http://weather.rap.ucar.edu/surface/ station.txt)。我已经使用一些混合的awk,sed和bash脚本来操纵我的文件。我使用GEMPAK软件包使用这些文件来可视化数据,该软件包可从Unidata免费获得。最大的文件将与GEMPAK一起使用,但不能完全发挥作用。为此,需要一个联接。 文件1包含气象站的位置信息,其中前6位数字是唯一的站标识符。不同的参数(站号,站名,国家/地区代码,纬度和站高)仅由其在行中的位置定义,即没有制表符。 060090 AKRABERG FYR DN 6138 -666 101 060100 VAGA FLOGHAVN DN 6205 -728 88 060110 TORSHAVN DN 6201 -675 55 060120 KIRKJA DN 6231 -631 55 060130 KLAKSVIK HELIPORT DN 6221 -656 75 060160 HORNS REV A DN 5550 786 21 060170 HORNS REV B DN …

2
Gawk:将数组传递给函数
卡在GNU awk 3.1.6中,认为我已经解决了它的数组错误,但是在600行awk程序中仍然遇到了范围问题。需要验证对awk中数组作用域的理解才能找到我的错误。 给定这个说明性的awk代码... function foo(ga) { ga[1] = "global result" } garray[1] = "global" foo(garray) print garray[1] 将打印... global result 由于数组总是通过引用传递给函数,因此所有数组始终是全局的。无法创建本地数组。它是否正确?一直无法找到明确说明这一点的文档。 由于我正在调试,并且3.1.6本身在该区域中存在已知的错误,因此我试图确定awk的错误在哪里消失并从我的那里开始。 补充:那么ga []为什么在函数内部起作用? 首先,foo(ga)实际上不需要将数组传递给函数。只需以garray[]在函数内部进行。这样做并没有可衡量的性能损失,它有助于调试和错误报告。 在使用中foo(ga),ga[]是全局数组的同义词garray[]。与其成为的本地副本garray[],不如说是一个指向garray[],而是,就像符号链接是指向文件的指针一样,因此可以使用多个名称访问同一文件(或数组)。 补充:澄清格伦·杰克曼的答案 虽然在函数外部创建的数组对于函数是全局的,可以传递给函数,也可以在函数内部引用,但是在函数内部创建的数组的确确实在函数本地,并且在函数外部不可见。修改杰克曼先生的例子说明了这一点... awk ' function bar(x,y) { split("hello world", y) print "x[1] inside: " x[1] print "y[1] inside: " y[1] } BEGIN { …
9 awk  function  array 

1
在sed或awk中替换多行[关闭]
已关闭。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗?添加详细信息并通过编辑此帖子来澄清问题。 5年前关闭。 我正在尝试使用sed或awk替换smb文件中的5行,但是我只是不知道如何处理换行符。
9 sed  awk  scripting  perl 

6
抓取文件的某些内容
因此,我知道存在解决此问题的工具,因为我已经听说过它们,但我不知道它们是什么。 我想做类似过滤掉所有数据的事情,但是/ etc / passwd中的用户名。 例如,我想从以下文件中获取user1,user2和user3。在这种情况下,逻辑可以是“将文本限制为文件每一行的第一个':'。 user1:x:1:4 user2:x:2:5 user3:x:3:6 输出为: user1 user2 user3
9 files  sed  awk  cut 

3
如何从文件末尾删除最后一个逗号分隔符?
如何在Linux上的文件中删除最后一个逗号分隔符? 文件示例: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536", 预期成绩: "is_supported_kafka_ranger" : "true", "kafka_log_dir" : "/var/log/kafka", "kafka_pid_dir" : "/var/run/kafka", "kafka_user" : "kafka", "kafka_user_nofile_limit" : "128000", "kafka_user_nproc_limit" : "65536"

2
使用awk处理3个文件
考虑以下文件: file1: boo,8,1024 foo,7,2048 file2: foo,0,24,154 noo,0,10,561 file3: 24,154,7,1024,0 我需要转到File1并检查是否$2==7;如果为true,则从File1中获取$1,$2并$3从File1中获取;现在我必须比较$1从File1等于$1从File2;如果是真的,我不得不采取$3并$4从文件2,其不存在于文件1,那么我必须去文件3,检查是否$1从文件3等于$3从文件2,并$2从文件3等于$4从文件2 ; 如果是,那么我必须检查是否$2来自File1等于$3从文件3,那么如果这种情况是真的,我有比较$3从File1中有$4来自文件3,如果$3从文件1大于$4从文件3。 我尝试了以下脚本: cat [file1] [file2] [file3] | awk -F, '{if(NF==3) {if($2==7){a[$1]=$1; b[$1]=$2; c[$1]=$3} }else {if(NF==4){if(a[$1]==$1){d[$3]=$3; e[$4]=$4} }else {if(NF==5){if(d[$1]==$1 && e[$2]==$2){print a[$1], b[$1], c[$1], d[$1]}} } } }' 所需的输出是: foo,7,2048,24,154,1024

7
在保留减号的同时删除某些列中的数值?
我有以下数据框,该数据框仅在奇数列中以负数无限地水平和垂直地继续: -1 2 3 4 -5 9 2 3 -4 5 -6 11 我想要第二,第四和第六完整列(或每个偶数列),而负号仅来自第一,第三和第五(或每个奇数列),所以我得到了: - 2 4 - 9 3 - 5 - 11 最终结果如下: -2 4 -9 3 -5 -11 因此,我需要不改变偶数列和奇数列的值,如果有一个负值,则保留-仅值,如果有一个正值,则将其丢弃。 有没有办法用awk / sed做到这一点? 据我所知,这是差不多的了: awk '{ for (i=2;i<=NF;i+=2) $i="" }1' FILE.txt | sed 's/[0-9,.]*//g'


6
AWK-将多个.dat文件的第二行输出到一个文件
我有多个文件,例如:(实际上我有80个) file1.dat 2 5 6 9 7 1 file2.dat 3 7 8 4 1 3 我想最后得到一个包含所有第二行的文件。即 output.dat 6 9 8 4 到目前为止,我所拥有的内容虽然循环了文件名,但是之前覆盖了文件。例如上述文件的输出将只是 8 4 我的shell脚本看起来像这样: post.sh TEND = 80 TINDX = 0 while [ $TINDX - lt $TEND]; do awk '{ print NR==2 "input-$TINDX.dat > output.dat TINDX = $((TINDX+1)) done

6
按大小查找图像:查找/文件/ awk
我一直在尝试找到一定高度(超过500像素)的png图像文件。我知道这file将返回图像尺寸。例: $ file TestImg1a.png TestImg1a.png: PNG image data, 764 x 200, 4-bit colormap, non-interlaced 但是我需要使用它来查找高度超过500px的目录中的所有文件。我知道如何打印所有文件而不论高度如何: find . -name '*.png' | xargs file | awk '{print $7 " " $1}' 但是,如何将$ 7限制为大于500的结果?
9 files  find  awk  xargs  images 

1
AWK中的两个字段分隔符(冒号和空格)
当其中之一为空格时,如何在awk命令中指定两个字段分隔符?我认为可以通过在awk中使用嵌入式if-else条件来完成此操作,但是我不确定确切的命令。 示例文件如下: cat test.txt Swapnil Engineer 20000 Avinash:Doctor:30000 Dattu GovntJob 50000 Amol:Master:10000 我想打印第二列($ 2)。预期输出为: Engineer Doctor GovntJob Master 当我尝试将空格和冒号同时用作字段分隔符时,它失败并出现语法错误: awk -F[ :] '{print $2}' test.txt awk: cmd. line:1: :] awk: cmd. line:1: ^ syntax error 我们如何使用两个字段分隔符并利用awk功能?
8 awk 

5
在行尾删除一个或多个用“-”分隔的字段
我将解析数据googleapis.txt bucket,abc-def-ghi-45gjd4-wwxis bucket,dde-wwq-ooi-66ciow-po22q instance,jkl-mno-1-zzz-68dkakw-oo9w8 disk,pqr-stu-10-kuy-l2oxapw-rp4lt 我期望下面的结果 bucket,abc-def-ghi bucket,dde-wwq-ooi instance,jkl-mno-1-zzz disk,pqr-stu-10-kuy 我以为我必须更改-为空格然后运行此命令 cat googleapis.txt | awk '{$NF="";sub(/[ \t]+$/,"")}1' | awk '{$NF="";sub(/[ \t]+$/,"")}1' 我从https://stackoverflow.com/a/27794421/8162936中获得了 解析后的信息,我将把该空间更改为hypen -。 有谁知道最佳实践或一线shell命令来解析它?谢谢大家

5
删除每一列中包含NA的行
我有一个制表符分隔的文件,如下所示: gene v1 v2 v3 v4 g1 NA NA NA NA g2 NA NA 2 3 g3 NA NA NA NA g4 1 2 3 2 每行中的字段数是固定的,并且相同。我想从上述文件中删除那些行,其中从第2列到最后一列的每一行的所有字段均为NA。然后输出应如下所示: gene v1 v2 v3 v4 g2 NA NA 2 3 g4 1 2 3 2

3
用不同文件中的另一列替换文件中一列中的匹配条目
我有两个制表符分隔的文件,如下所示: 文件1: NC_008146.1 WP_011558474.1 1155234 1156286 44173 NC_008146.1 WP_011558475.1 1156298 1156807 12 NC_008146.1 WP_011558476.1 1156804 1157820 -3 NC_008705.1 WP_011558474.1 1159543 1160595 42748 NC_008705.1 WP_011558475.1 1160607 1161116 12 NC_008705.1 WP_011558476.1 1161113 1162129 -3 NC_009077.1 WP_011559727.1 2481079 2481633 8 NC_009077.1 WP_011854835.1 1163068 1164120 42559 NC_009077.1 WP_011854836.1 1164127 1164636 7 文件2: NC_008146.1 GCF_000014165.1_ASM1416v1_protein.faa …
8 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.