我有一个csv文件,其中每行定义给定建筑物中的房间.与房间一起,每排都有一个场地.我要提取的是所有建筑物的所有楼层.
我的文件看起来像这样......
"u_floor","u_room","name"
0,"00BDF","AIRPORT TEST "
0,0,"BRICKER HALL, JOHN W "
0,3,"BRICKER HALL, JOHN W "
0,5,"BRICKER HALL, JOHN W "
0,6,"BRICKER HALL, JOHN W "
0,7,"BRICKER HALL, JOHN W "
0,8,"BRICKER HALL, JOHN W "
0,9,"BRICKER HALL, JOHN W "
0,19,"BRICKER HALL, JOHN W "
0,20,"BRICKER HALL, JOHN W "
0,21,"BRICKER HALL, JOHN W "
0,25,"BRICKER HALL, JOHN W "
0,27,"BRICKER HALL, JOHN W "
0,29,"BRICKER HALL, JOHN W "
0,35,"BRICKER HALL, JOHN W "
0,45,"BRICKER HALL, JOHN W …Run Code Online (Sandbox Code Playgroud) 在AWK中,是否可以指定字段的"范围"?
例.给定一个制表符分隔的文件"foo",每行100个字段,我想只打印每行的字段32到57,并将结果保存在文件"bar"中.我现在应该做什么:
awk 'BEGIN{OFS="\t"}{print $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57}' foo > bar
Run Code Online (Sandbox Code Playgroud)
这样做的问题是输入和容易出错是很繁琐的.
是否有一些句法形式允许我以更简洁,更不容易出错的方式(如"$ 32 .. $ 57")说出同样的内容?
我有一个包含三列的文件.我想删除第3列(就地编辑).我怎么能用awk或sed做到这一点?
123 abc 22.3
453 abg 56.7
1236 hjg 2.3
Run Code Online (Sandbox Code Playgroud)
期望的输出
123 abc
453 abg
1236 hjg
Run Code Online (Sandbox Code Playgroud) awk是否有OR声明,即给出以下代码段:
awk '{if ($2=="abc") print "blah"}'
Run Code Online (Sandbox Code Playgroud)
是否可以添加一个OR语句,以便$2==abc OR def -> print?
我的服务器具有异常高的CPU使用率,我可以看到Apache使用太多的内存.我有一种感觉,我是一个IP的DOS - 也许你可以帮我找到他?
我使用以下行,找到10个最"活跃"的IP:
cat access.log | awk '{print $1}' |sort |uniq -c |sort -n |tail
Run Code Online (Sandbox Code Playgroud)
前5个IP对服务器的请求大约是"普通"用户的200倍.但是,我不知道这5个是非常频繁的访问者,还是他们正在攻击服务器.
是否有方法,将上述搜索指定为时间间隔,例如.最近两个小时或今天10-12之间?
干杯!
2011年10月23日更新 - 我需要的命令:
在过去X小时内获取条目[这里两小时]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print Date FS $4}' access.log
Run Code Online (Sandbox Code Playgroud)
在过去X小时内获取最活跃的IP [这里两小时]
awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print $1}' access.log | sort |uniq -c |sort -n | tail
Run Code Online (Sandbox Code Playgroud)
在相对时间范围内获取条目
awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && …Run Code Online (Sandbox Code Playgroud) 使用grep我知道如何将上下文设置为固定数量的行.是否可以根据任意字符串条件显示上下文,例如将后上下文设置为"直到下一个空白行"?
或者可能还有其他一些工具组合?
基本上我有一个连续行的日志文件,空白行分隔我要在日志文件中搜索字符串的"事件",但显示整个事件....
这是输入(样本):
name1@gmail.com|com.emailclient.account
name2@msn.com|com.socialsite.auth.account
Run Code Online (Sandbox Code Playgroud)
我正在努力实现这个目标:
Emailclient name1@gmail.com
Socialsite name2@msn.com
Run Code Online (Sandbox Code Playgroud)
如果我像这样使用AWK:
cat foo | awk 'BEGIN{FS="|"} {print $2 " " $1}'
Run Code Online (Sandbox Code Playgroud)
它通过在字段2的顶部覆盖字段1来弄乱输出.
有什么提示/建议吗?谢谢.
我想在我的Debian 7.3上制作大脚本(类似翻译的内容和更多新的用户友好环境).我有个问题.我只想使用命令给我的一些信息.例如,我的ifconfig看起来像:
eth0 Link encap:Ethernet HWaddr 08:00:27:a3:e3:b0
inet addr:192.168.1.103 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::a00:27ff:fea3:e3b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1904 errors:0 dropped:0 overruns:0 frame:0
TX packets:2002 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1309425 (1.2 MiB) T
Run Code Online (Sandbox Code Playgroud)
我想只显示IP地址:echo"你的IP地址是:(IP_ADDRESS)".是否有任何命令允许我做这样的事情,在流中搜索我想要得到的信息?我知道grep,sed但我对他们并不是很好.
编辑:首先要感谢您帮我解决这个问题,现在我知道了更多.其次说项目正在进行中.如果有人对它感兴趣,请关注我.
当我运行以下
awk -F\, '{print $2,":",$1}'
Run Code Online (Sandbox Code Playgroud)
它打印
"First : Second"
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到
"First:Second"
Run Code Online (Sandbox Code Playgroud)