1

我想根据最后一个字符 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
4

2 回答 2

1

一种方法awk

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

它分隔文件/,然后在每列上查找最后一个字符。如果它以Kthen 结尾,则打印该列的前 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
于 2013-06-11T04:44:40.680 回答
0

由于您在上面的评论中声明您希望将此列表分配给一个变量并在循环中迭代名称,因此无需使用awk或其他外部工具 - 只需使用参数扩展

$ 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
于 2013-06-12T15:04:15.817 回答