我希望根据最后一个字符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
答案 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