题目:给定任意以逗号分隔的文本,请输出去掉第二列之后的结果,例如:
zero file,12,one disk,2,two kind,300,tree Dog,4
输出结果如下:
zero
file,one
disk,two
kind,tree
Dog
一看到这个问题,第一时间想到的是awk,遍历每一行,然后把第二个变量去掉之后,再拼接上第三个变量,实现了一下,结果如下:
######################## # Date: 2017-03-10 # Version: v1.0 # Author: lizp # Usage: strsplit ######################## if [ -z $1 ] then echo "input format wrong,eg : strsplit.sh ." else cat $1 | awk -F ',' '{print $1,$3}' | while read var1 var3 do if [ -n "$var1" ] then result=$var1 if [ -n "$var3" ] then result+="," result+=$var3 fi fi echo $result done fi
结果执行完了,与示例所给的一致,然而,这种方式得到的结果,只会输出前三个变量,后面的变量则不会输出了,所以这样实现是有问题的。
后来,我换了个思路,为什么要从行的角度去处理这个问题呢,shell中难道没有类似UE中Alt+c的列编辑模式吗?
经过查询,我发现了cut命令,于是问题一行代码迎刃而解:
#################### # Date: 2017-03-10 # Version: v1.0 # Author: lizp_billing # Usage: strsplit #################### #去掉第二列 cut -f2 --complement -d"," $1
cut命令可以从列的角度去处理文本,这样一来,这个问题瞬间变得简单了,"f"后面跟要提取的字段,如果有“--complement”则表示提取非N列之外的的数据,此处的N指"f"后面跟的列数。