linux shell awk 如何区分空格和tab

先介绍下环境:在一个文件中,有空格有tab,现想用awk工具实现已tab分割出来第一域,第二域等。
[root@test]# cat list
1 2 3 4
其中1到2之间为空格,2到3,3到4之间为tab

[root@test]# cat test.sh
#!/bin/sh
while read line
do
one=$(echo $line |awk -F"\t" '{print $1}')
echo $one
echo $line
done<list
执行上面的脚本

[root@test]# ./test.sh
1 2 3 4
1 2 3 4
从上面的执行结果可以看出,并没有以tab进行分割。
但是直接在命令行输入awk命令可实现这种需求:
[root@test]# cat list |awk -F"\t" '{print $1}'
1 2

这是为什么?请问如何实现这种有空格和tab的文件,以tab进行分割域的需求!

第1个回答  2013-09-19
你先试试在这么做:echo `cat list`

然后你仔细看看你脚本里面 `echo $line` 的结果

然后你试试自己总结一下,为什么会脚本会输出这样的结果

想不到再留言给我吧

cat会输出文件原本的样子。本回答被提问者采纳
第2个回答  2013-09-19
-F "\t" 是你制定了tab为分隔符

空格当然是无视的,$1就是应该是1 2追问

我也觉的应该是这样,但是事实不是这样,所以比较纳闷!您可以试试在脚本中写就有问题,在console写就ok。

第3个回答  2013-09-19
多测试

在用shell进行字符串截断时常常会出现一些意想不到的状况,总结了以下,大部分情况是使用的echo命令导致的。
cat,read等命令读入tab delimited文本,然后用echo输出的时候,文本里面的tab会变成space空格,所以在你尝试以tab为分隔符分割文本的时候要特别注意这种情况。

事实上,echo除了 -n options 之外,常用选项还有:
-e:启用反斜线控制字符的转换
-E:关闭反斜线控制字符的转换(预设如此)
-n:取消行末之换行符号(与 -e 选项下的 \c 字符同意)

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网