根据最后一个字符提取字段

时间:2012-05-23 15:21:10

标签: extract cut

我希望根据最后一个字符K提取字段的一部分。每个字段以K结尾,而我想要提取的字段只有4个字符。

我有类似的东西

fromdata.set.days/john001.00.K 

fromdata.set.days/bian001.00.K

fromdata.set.days/aluo001.00.K

fromdata.set.days/mark001.00.K

我想从上面提取以下4个字符名称

john

bian

aluo

mark

2 个答案:

答案 0 :(得分:1)

awk的一种方式:

awk -F/ '{for (i=1;i<=NF;i++) if(substr($i,length($i))=="K") print substr($i,1,4) }' file

它在/上分隔文件,然后在每列上查找最后一个字符。如果以K结束,则打印该列的前4个字符。

测试:

$ cat file
fromdata.set.days/john001.00.K
fromdata.set.days/bian001.00.K
fromdata.set.days/aluo001.00.K
fromdata.set.days/mark001.00.K

$ awk -F/ '{for (i=1;i<=NF;i++) if(substr($i,length($i))=="K") print substr($i,1,4) }' file
john
bian
aluo
mark

答案 1 :(得分:0)

由于您在上面的评论中声明要将此列表分配给变量并在循环中迭代名称,因此无需使用awk或其他外部工具 - 只需使用{{3 }}:

$ cat foo.txt
fromdata.set.days/john001.00.K
fromdata.set.days/bian001.00.K
fromdata.set.days/aluo001.00.K
fromdata.set.days/mark001.00.K

$ cat test.sh
#!/bin/bash

while read line; do
        name=${line#*/}
        name=${name:0:4}
        echo "${name}"
done < foo.txt

示例运行:

$ ./test.sh
john
bian
aluo
mark