Questions tagged «awk»

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


4
如何使用SED或AWK将模板文件中的占位符替换为包含特殊字符的可变内容?
CentOS的6.3 我正在尝试获取一个小脚本,以发送包含正文中电子邮件标头副本的电子邮件(用于内部报告)。 模板文件包含以下内容: Alert Report Alert has triggered at TMPDATE HEADERS ------- TMPHEADERS SOURCE IP --------- TMPSOURCEIP 我希望我的脚本查找和替换与警报有关的实际信息“ TMP”占位符。 日期和源IP变量似乎工作正常,但是如果/当我尝试查找/替换TMPHEADERS时,它将导致奇怪的症状,包括整个输出为空。我可以肯定地说,这与包含许多特殊字符(@%&等)的标头有关。 有人可以建议如何最好地通过bash做到这一点吗? 我当前的代码如下所示: cat /test/emailtemplate | sed s/TMPHEADERS/"$HEADERS"/ > /test/output 更新 根据请求,这是我尝试插入模板文件的一组示例头(IP地址和电子邮件地址已更改,以保护无辜的:-)): From foo@yahoo.com Thu Apr 25 20:18:19 2013 Return-Path: <foo@yahoo.com> Received: from nm30-vm0.bullet.mail.ne1.yahoo.com (nm30-vm0.bullet.mail.ne1.yahoo.com [98.138.11.36]) by serv.example.com (8.14.4/8.14.4) with ESMTP …

5
从命令行删除每行的第一个和最后一个字符
我正在尝试在文本文件中删除每行的第一个和最后一个字符,并将截断的版本保存在新文件中。是否有人对使用awk大型文件专用的Linux程序或命令有效地做到这一点? input.txt (s,2,4,5,6) "s,1,5,5,2" {z,0,4,5,3} [y,2,4,5,5] (y,4,4,5,7) (r,20,4,5,7) (e,9,4,5,2) 预期的output.txt s,2,4,5,6 s,1,5,5,2 z,0,4,5,3 y,2,4,5,5 y,4,4,5,79 r,20,4,5,7 e,9,4,5,2

2
在awk中使用shell变量
这是我的脚本(查找包含指定模式的文件): find . -type f \ -exec awk -v vawk="$1" '/'"$vawk"'/ {c++} c>0 { print ARGV[1]; exit 0 } END { if (! c) {exit 1}}' \{\} \; 我想将我的脚本与参数§一起使用: MyScript.sh pattern 我的问题是我无法将$1变量放入awk。 当我尝试调试脚本时 bash -x MyScript.sh pattern 这是输出: + find . -type f -exec awk -v vawk=pattern '// {c++} c>0 …
8 bash  awk  variable 

2
用于连接两个文件的shell脚本
我想编写一个shell script获取两个文件A和的文件B,并得到如下结果: 档案A: user_a tel_a addr_a user_b tel_b addr_b 档案B: process_1 user_a process_2 user_a process_3 user_b 结果: user_a process_1 tel_a addr_a user_a process_2 tel_a addr_a user_b process_3 tel_b addr_b 我怎样才能做到这一点?awk或者是其他东西?

3
如何将相同的awk操作应用于不同的文件?
我是awk的新手,我不知道是否可以编写执行此操作的awk脚本: 我有数百个必须排序的数据文件。对于每一个,我使用以下一线: awk 'ORS=NR%3?" ":"\n" ' file1.tex > file1_sorted.tex awk 'ORS=NR%3?" ":"\n" ' file2.tex > file2_sorted.tex ... 然后得到所需的输出。但是我想有一个脚本来自动执行此操作,获取每个文件,应用该操作并编写相应的排序文件。 多谢您的协助!
8 shell  awk 

6
如何将制表符分隔的数据转换为逗号分隔的数据?
我通过亚马逊的ec2命令行工具请求ec2快照列表: ec2-describe-snapshots -H --hide-tags > snapshots.csv 数据看起来像这样: SnapshotId VolumeId StartTime OwnerId VolumeSize Description snap-00b66464 vol-b99a38d0 2012-01-05 5098939 160 my backup 我如何在将数据重定向到之前拦截数据snapshots.csv并执行以下操作: 用逗号替换“制表符” 用引号封装值 如果值是全数字,请在=其前面加上一个前缀,以便excel将其视为文本-例如OwnerId应为"=5098939“(如果不能内联完成则不需要此,而是需要脚本文件或函数) 所需的输出: "SnapshotId","VolumeId","StartTime","OwnerId","VolumeSize","Description" "snap-00b66464","vol-b99a38d0","2012-01-05","=5098939","=160","my backup"

6
AWK:将行换成72个字符
$ awk 'length > 72' {HOW TO PRINT THE LINEs IN PCS?} msg 即我希望它\n在72个字符之后添加并继续,因此最初您可能需要删除所有single \n并将其添加。使用其他工具可能更容易一些,但让我们尝试一下awk。 [更新] 威廉姆森提供了正确的答案,但需要一些帮助才能阅读。我在下面用更简单的示例将问题分为几部分。 为什么\t在两种情况下都显示下面的代码,gsub应该替换掉?x是一个虚拟文件,结尾处为奇数0。 line = $0 \n more = getline \n gsub("\t"," ")在威廉姆森的答复中上线,line显然得到整个标准输出,而more获得的弹出值是$0吗? 编写第1部分的代码 $ gawk '{ hallo="tjena\t tjena2"; gsub("\t"," "); }; END {print hallo; gsub("\t", ""); hallo=hallo gsub("\t",""); print hallo }' x tjena tjena2 …

1
解析(可伪造的)nmap输出以使用awk之类的文本工具打印IP \ t [所有打开的端口]的列表
我想找到一种方法,为发现至少有一个开放端口的每个IP地址打印,打印该IP地址,然后列出由逗号分隔的开放端口列表。端口和IP地址应使用制表符分隔符分隔。 我可以通过丑陋的方式来做到这一点,方法是仅对IP地址进行grep,将其写入文件,然后使用IP地址结果文件作为输入文件再次对nmap文件进行grep,然后使用cut和sed修剪打开的端口,将其写入文件,然后加入两个文件。这是一个丑陋的过程,在边缘情况下无法可靠地工作。 有没有一种简单的方法可以用awk做到这一点?我想我需要在awk中有一个函数来查找所有打开的端口并返回它们,以便可以将它们与IP地址一起打印,但是我还没有找到如何做的方法。 源数据示例: Host: 10.0.0.101 ()Ports: 21/closed/tcp//ftp///, 22/closed/tcp//ssh///, 23/closed/tcp//telnet///, 25/closed/tcp//smtp///, 53/closed/tcp//domain///, 110/closed/tcp//pop3///, 139/open/tcp//netbios-ssn///, 143/closed/tcp//imap///, 445/open/tcp//microsoft-ds///, 3389/closed/tcp//ms-wbt-server/// 预期输出数据: 10.0.0.101 139,445

3
提取与另一个文件中的单词列表匹配的行
我有以下行的文件1: ATM 1434.972183 BMPR2 10762.78192 BMPR2 10762.78192 BMPR2 1469.14535 BMPR2 1469.14535 BMPR2 1738.479639 BMS1 4907.841667 BMS1 4907.841667 BMS1 880.4532628 BMS1 880.4532628 BMS1P17 1249.75 BMS1P17 1249.75 BMS1P17 1606.821429 BMS1P17 1606.821429 BMS1P17 1666.333333 BMS1P17 1666.333333 BMS1P17 2108.460317 BMS1P17 2108 文件2包含单词列表: ATM BMS1 因此,输出将如下所示: ATM 1434.972183 BMS1 4907.841667 BMS1 4907.841667 BMS1 880.4532628 BMS1 …

1
替换File1中的模式,并用File2中相应的匹配模式+列替换
我研究了许多类似的问答,但仍然停留在解决方案上。 我有2个档案。 文件1 cow aaaaa brown bbbbb often ccccc farts ddddd 文件2 在File2中,以“ space”作为分隔符,然后输入col 1 =“ brown”和col2 =“ 149,456,foo”。另外,File1和File2的顺序不同(排序在这里不起作用,我想依靠匹配的键进行替换)。 brown 149,456,foo cow 192,231,bar farts 81,2007,tip often 427,541,top 我想创建File3 cow 192,231,bar aaaaa brown 149,456,foo bbbbb often 427,541,top ccccc farts 81,2007,tip ddddd 换句话说,记下column1-in-File2(棕色)并在File1中搜索它。在File1中找到该匹配项后,请将匹配项替换为相应File2的整行(棕色149,456,foo)。 我已经试过了: $ awk 'NR==FNR{a[NR]=$0;next}{$6=a[FNR]}1' file2 file1 但是结果似乎占用了每个row1,然后将其与其他文件中的row1一起打印,不涉及匹配/替换。 brown brown …
1 awk  sed 

5
如何grep / awk / sed随机模式
我有一个尝试从中拉出字符串的日志文件。数字字符串是随机生成的,到目前为止,我使用grep / sed / awk的所有尝试均未成功。 我有一个类似以下的条目: "id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title": 我想解析的是随机生成的 30c962de-b448-40ac-ade8-da6a8f49ce88 任何人都有快速而肮脏的方法来使它起作用吗?
awk  sed  grep 

3
在包含数千列的文件中乘以特定列
in文件看起来像这样 -17.3644 0.00000000 0.00000000 .... -17.2703 0.00000000 0.00000000 .... -17.1761 0.00000000 0.00000000 .... -16.5173 0.00000000 0.00000000 .... -16.4232 0.00000000 0.00000000 .... 期望输出应为 -173.644 0.00000000 0.00000000 .... -172.703 0.00000000 0.00000000 .... -171.761 0.00000000 0.00000000 .... -165.173 0.00000000 0.00000000 .... -164.232 0.00000000 0.00000000 .... 所以我想将第一列乘以10,但同时还要保留其他1000列。与awk '{print $1*10}' infile > outfile您只打印第一列,我怎么能还保持其他列?

1
根据第二列排序,并从最高到最低列出
TGAAACATGCCTTTCACCTCCTGCCATGATTGTGAGGCCT 2 GTGTTGCCCAGGTTGGTTTCAAACTCAGCTCAAGTGATCT 1 GAGACTCCTTCAGGAGACTGGTCCCCTGTCCTCGCCTCTC 3 CATGTTCTCCTGGAAGCCATGTGAGGAAGGCACATCATGG 8 AAGGACATAATCTCATTACTTTTATGGCCGCATAGTATTC 4 AGAGGCAGTGTAAGTGAGGTAGTTGAAAGTATGGACTCTG 2 我想使用第二列将行从最高编号重新排列到最低编号 预期产量 CATGTTCTCCTGGAAGCCATGTGAGGAAGGCACATCATGG 8 AAGGACATAATCTCATTACTTTTATGGCCGCATAGTATTC 4 GAGACTCCTTCAGGAGACTGGTCCCCTGTCCTCGCCTCTC 3 AGAGGCAGTGTAAGTGAGGTAGTTGAAAGTATGGACTCTG 2 TGAAACATGCCTTTCACCTCCTGCCATGATTGTGAGGCCT 2 GTGTTGCCCAGGTTGGTTTCAAACTCAGCTCAAGTGATCT 1
-1 awk  python  sort  bioinformatics  r 
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.