awk的substring问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

awk的substring问题

#1

帖子 ceclinux » 2013-08-14 13:56

在用awk截取字符串最后两个字符的时候,发现空格是无法截取的,求解

代码: 全选

awk '{len=length($NF) ;print substr($NF,len-1,len)}' worldissue.txt 
我有一行是

代码: 全选

^ILast but not least,                  $
截取的是t,
而不是两个空格
如果有其他的截取方法也行
谢谢了
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: awk的substring问题

#2

帖子 zhw2101024 » 2013-08-14 15:12

awk默认以空格作为分隔符,所以会把所有空格都过滤了。
如果要截取每一行最后两个字符的话,可以用

代码: 全选

sed -n 's/^.*\(.\{2\}\)$/\1/p' worldissue.txt
。awk适合对整齐的文本按列做批量处理
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: awk的substring问题

#3

帖子 ceclinux » 2013-08-14 16:04

zhw2101024 写了:awk默认以空格作为分隔符,所以会把所有空格都过滤了。
如果要截取每一行最后两个字符的话,可以用

代码: 全选

sed -n 's/^.*\(.\{2\}\)$/\1/p' worldissue.txt
。awk适合对整齐的文本按列做批量处理
谢谢了,我居然没有想到这个问题
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: awk的substring问题

#4

帖子 cao627 » 2013-08-14 19:03

代码: 全选

$ echo "^ILast but not least,                  " | awk '{len=length($0) ;print substr($0,len-1,len)}' | tr ' ' 'a'
aa
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: awk的substring问题

#5

帖子 lilydjwg » 2013-08-23 0:23

楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: awk的substring问题

#6

帖子 ceclinux » 2013-08-23 1:18

lilydjwg 写了:楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
谢谢,突然发现4楼也是对的。。。
对awk机制还是不太懂啊
但是zhw2101024我也没看出哪里错了
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: awk的substring问题

#7

帖子 lilydjwg » 2013-08-23 1:23

ceclinux 写了:
lilydjwg 写了:楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
谢谢,突然发现4楼也是对的。。。
对awk机制还是不太懂啊
但是zhw2101024我也没看出哪里错了
他没用 awk,解决了你的需求但是没解决你的疑惑。
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: awk的substring问题

#8

帖子 zhw2101024 » 2013-08-24 18:50

lilydjwg 写了:
ceclinux 写了:
lilydjwg 写了:楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
谢谢,突然发现4楼也是对的。。。
对awk机制还是不太懂啊
但是zhw2101024我也没看出哪里错了
他没用 awk,解决了你的需求但是没解决你的疑惑。
我错了,不求甚解,给的是workaround而不是fix :em06
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: awk的substring问题

#9

帖子 ceclinux » 2013-08-25 19:49

zhw2101024 写了:
lilydjwg 写了:
ceclinux 写了:
lilydjwg 写了:楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
谢谢,突然发现4楼也是对的。。。
对awk机制还是不太懂啊
但是zhw2101024我也没看出哪里错了
他没用 awk,解决了你的需求但是没解决你的疑惑。
我错了,不求甚解,给的是workaround而不是fix :em06
我说过有其他的方法也行啊 :em01
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: awk的substring问题

#10

帖子 lilydjwg » 2013-08-25 20:31

ceclinux 写了:
zhw2101024 写了:
lilydjwg 写了:
ceclinux 写了:
lilydjwg 写了:楼上 cao627 才是正确,不过这样子更简单:

代码: 全选

grep -o '..$'
谢谢,突然发现4楼也是对的。。。
对awk机制还是不太懂啊
但是zhw2101024我也没看出哪里错了
他没用 awk,解决了你的需求但是没解决你的疑惑。
我错了,不求甚解,给的是workaround而不是fix :em06
我说过有其他的方法也行啊 :em01
好啦,我也是随意地说了句,大家不要纠结啦 :-[
回复