不使用sed或awk,只cut,当字段的数量未知或随每一行变化时,我如何得到最后一个字段?
当前回答
下面实现一个朋友的建议
#!/bin/bash
rcut(){
nu="$( echo $1 | cut -d"$DELIM" -f 2- )"
if [ "$nu" != "$1" ]
then
rcut "$nu"
else
echo "$nu"
fi
}
$ export DELIM=.
$ rcut a.b.c.d
d
其他回答
为这个老问题添加一个方法只是为了好玩:
$ cat input.file # file containing input that needs to be processed
a;b;c;d;e
1;2;3;4;5
no delimiter here
124;adsf;15454
foo;bar;is;null;info
$ cat tmp.sh # showing off the script to do the job
#!/bin/bash
delim=';'
while read -r line; do
while [[ "$line" =~ "$delim" ]]; do
line=$(cut -d"$delim" -f 2- <<<"$line")
done
echo "$line"
done < input.file
$ ./tmp.sh # output of above script/processed input file
e
5
no delimiter here
15454
info
除了bash,只使用cut。 我想,还有回声。
下面实现一个朋友的建议
#!/bin/bash
rcut(){
nu="$( echo $1 | cut -d"$DELIM" -f 2- )"
if [ "$nu" != "$1" ]
then
rcut "$nu"
else
echo "$nu"
fi
}
$ export DELIM=.
$ rcut a.b.c.d
d
选择1
choose支持负索引(语法类似于Python的切片)。
你可以尝试这样做:
echo 'maps.google.com' | rev | cut -d'.' -f 1 | rev
解释
Rev将maps.google.com颠倒为moc.elgoog.spam Cut使用点(即“。”)作为分隔符,并选择第一个字段,即moc 最后,我们再次反向得到com
在处理表格数据时最好使用awk。你不需要听从命令。如果awk可以实现,为什么不使用它呢?我建议您不要浪费宝贵的时间,只需使用少量命令就可以完成工作。
例子:
# $NF refers to the last column in awk
ll | awk '{print $NF}'