当前位置: 技术问答>linux和unix
关于awk 空格处理的问题
来源: 互联网 发布时间:2016-06-04
本文导语: 我要用shell实现从一个文本文件中读取指定数据。文件内容如下: ID NAME IT TEXT 01 Mac io a 02 Mi you out b 03 Ma s s in c 我原本...
我要用shell实现从一个文本文件中读取指定数据。文件内容如下:
ID NAME IT TEXT
01 Mac io a
02 Mi you out b
03 Ma s s in c
我原本使用awk但发现由于NAME列有的有空格,读出数据就不对了。
请问如何能正确读取每一列的数据。谢谢
ID NAME IT TEXT
01 Mac io a
02 Mi you out b
03 Ma s s in c
我原本使用awk但发现由于NAME列有的有空格,读出数据就不对了。
请问如何能正确读取每一列的数据。谢谢
|
处理思路,逐行读入处理,用awk求出每一行的域的个数fn,然后每一行中再循环,第一个域给f1,第fn-1个域给f3,第fn个域给f4,第2到fn-2个域拼起来给f2
[root@p6]#cat file1
01 Mac io a
02 Mi you out b
03 Ma s s in c
[root@p6]#cat bb.sh
[root@p6]#cat file1
01 Mac io a
02 Mi you out b
03 Ma s s in c
[root@p6]#cat bb.sh
while read line
do
fn=`echo $line|awk '{print NF}'`
if [ "$fn" = "0" ]
then
break
fi
i=0;
f1=""
f2=""
f3=""
f4=""
for fd in $line
do
i=`expr $i + 1 `
if [ "$i" = "1" ]; then
f1=$fd
fi
if [ "$i" = "$fn" ]; then
f4=$fd
fi
fsec=`expr $fn - 1`
if [ "$i" = "$fsec" ]; then
f3=$fd
fi
if [ "$i" -gt "1" ]; then
if [ "$i" -lt "$fsec" ];then
f2=$f2" "$fd
fi
fi
done
echo $f1 "--" $f2 "--" $f3 "--" $f4
done