我想根据最后一个字符 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
一种方法awk
:
awk -F/ '{for (i=1;i<=NF;i++) if(substr($i,length($i))=="K") print substr($i,1,4) }' file
它分隔文件/
,然后在每列上查找最后一个字符。如果它以K
then 结尾,则打印该列的前 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
由于您在上面的评论中声明您希望将此列表分配给一个变量并在循环中迭代名称,因此无需使用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