awk分割域问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

awk分割域问题

#1

帖子 Think1st » 2012-02-20 17:15

如题,有 file1
aaa_2011_09_03.txt
bbb_2011_09_04.txt
ccc_2011_09_05.txt
若用

代码: 全选

more file1 | awk -F"_" '{print $1,$2,$3,$4}'
结果是
aaa 2011 09 03.txt
bbb 2011 09 04.txt
ccc 2011 09 05.txt
而我想要的结果是:
aaa 2011_09_03.txt
bbb 2011_09_04.txt
ccc 2011_09_05.txt
我只想awk每行只做一次分割,该怎么做? :em20
在这里,问题比答案更抢手。
头像
josephyoung
帖子: 158
注册时间: 2011-11-05 18:53
来自: 南极圈

Re: awk分割域问题

#2

帖子 josephyoung » 2012-02-20 19:20

你的要求可以这样

代码: 全选

awk 'sub("_"," ")' file1
至于怎么每行一次分割,awk貌似没这样的功能啊
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: awk分割域问题

#3

帖子 eexpress » 2012-02-20 19:56

可以打印某行以后的全部。只是分割符号要添加。
sed吧。多用正则。
● 鸣学
hmk913
帖子: 17
注册时间: 2011-08-19 10:32

Re: awk分割域问题

#4

帖子 hmk913 » 2012-02-20 23:02

代码: 全选

sed 's/_/ /' file
你试试。。
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: awk分割域问题

#5

帖子 Think1st » 2012-02-21 10:00

恩,试过

代码: 全选

awk 'sub("_"," ")' file1

代码: 全选

sed 's/_/ /' file1
都可一达到我要的效果。
那也想弄明白awk,是可以限定分割多少次的吗?比如每行只做一次分割,或者只做两次分割,后面的就不做了。
有没有这样的写法?
在这里,问题比答案更抢手。
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: awk分割域问题

#6

帖子 Methuselar » 2012-02-21 16:25

Think1st 写了: ......
那也想弄明白awk,是可以限定分割多少次的吗?比如每行只做一次分割,或者只做两次分割,后面的就不做了。
有没有这样的写法?
没有。 awk不记录分隔符索引。
也就是说awk无法简单靠分隔符做到

代码: 全选

cut -d'_' -f2-
做的事情。

话说你到底要前半部还是后半部? cut是否够用? 数据有其他模式否? 关键看你的数据可以hardcode到什么程度.

代码: 全选

awk -F'[a-z]_' '{print $2}'
Mea Culpa!
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: awk分割域问题

#7

帖子 Think1st » 2012-02-22 9:12

恩,像
cut -d‘_' -f2- file1
应该比较符合我的需要。

我的疑问就是用awk不使用正则式的话,有没有类似cut的"awk -F'_' -f2- file1" 的这种用法(PS: -f2- 借用cut的表达方式。。)
然后可以得到结果呢?
aaa 2011_09_03.txt
bbb 2011_09_04.txt
ccc 2011_09_05.txt
在这里,问题比答案更抢手。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: awk分割域问题

#8

帖子 eexpress » 2012-02-22 9:34

perl的正则,才是万能的。别纠结一个软件。awk只是处理一种类型的数据方便,并不是通用的软件。
用perlre,你的分割符号可以任意,这任意包括任意的字符串组合。

多学正则。
● 鸣学
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: awk分割域问题

#9

帖子 Think1st » 2012-02-22 20:06

学习了。
在这里,问题比答案更抢手。
回复