Chinaunix

标题: shell怎么取出文件的第一列的第一行 [打印本页]

作者: pomtch    时间: 2011-06-16 21:57
标题: shell怎么取出文件的第一列的第一行
看着标题有点郁闷吧,我先说一下我的需求.
我现在有这么一个文件,
        0       HaErBing        10.101.0.3
        1       ShenYang        10.21.1.8
        2       BeiJing         10.103.0.3
        3       TaiYuan         10.103.254.3
        4       HuHeHaoTe       10.104.0.3
        5       ZhengZhou       10.105.253.3
        6       WuHan           10.211.0.3
        7       XiAn            10.105.254.3
        8       JiNan           10.106.0.3
        9       ShangHai        10.107.5.3
        10      NanChang        10.108.6.3
        11      GuangZhou       10.109.7.3
        12      LiuZhou         10.51.1.90
        13      ChengDou        10.111.1
        14      KunMing         10.114.0.2
        15      LanZhou         10.112.0.1
        16      QingZang        10.63.1.6
        17      XinJiang        10.64.1.7

想把第一列做为循环变量,也就是第一次执行输出0,第二次执行输出1,以此类推往下走.我知道是用sed和awk,只因刚刚开始学的不好,前来请教.
作者: lionfun    时间: 2011-06-16 22:13
什么意思?
作者: rdcwayx    时间: 2011-06-17 08:27
  1. awk '{print $1}' infile
复制代码

作者: ywlscpl    时间: 2011-06-17 08:40
看不懂
作者: liion631818    时间: 2011-06-17 09:09

  1. cut -d " " -f1
复制代码

作者: pomtch    时间: 2011-06-17 09:22
我就是想一次读一行完了后再读出每一行的第一列
作者: pomtch    时间: 2011-06-17 09:22
3L的做法只是把所有列打印出来了
作者: ywlscpl    时间: 2011-06-17 09:25
本帖最后由 ywlscpl 于 2011-06-17 09:26 编辑

while read var x
do
    echo $var
done <file
作者: jidi_78    时间: 2011-06-17 09:27
是这个意思?
  1. awk '{print $0,"\t" $1}'  data
复制代码

作者: rdcwayx    时间: 2011-06-17 09:46
3L的做法只是把所有列打印出来了
pomtch 发表于 2011-06-17 09:22

    这个意思?
  1. awk '{print $1}' infile |whiel read line
  2. do

  3.      # YOUR CODE HERE

  4. done
复制代码

作者: zooyo    时间: 2011-06-17 10:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: pomtch    时间: 2011-06-17 11:52
QUOTE:3L的做法只是把所有列打印出来了
pomtch 发表于 2011-06-17 09:22

    这个意思?awk '{print $1}' infile |whiel read line

do



     # YOUR CODE HERE



done
复制代码



对对就是这意思了,谢谢.
作者: xiaopan3322    时间: 2011-06-17 21:37
回复 11# zooyo


    没办法,前列腺炎不好治
作者: yinyuemi    时间: 2011-06-18 02:04
回复 12# pomtch


    不要awk也行;

cat file |while read line1 line2
do
xxxx
done

变量使用$line1
作者: dxwwp    时间: 2011-06-18 10:04
我也是菜鸟,高手轻拍!

cat code.sh

  1. #!/bin/bash

  2. Fname=$1

  3. Lines=`cat $Fname |wc -l`
  4. for ((N=1;N<=$Lines;N++));
  5. do
  6. Var1=`sed -n "${N}p" $Fname`
  7. Var2=`echo $Var1 |awk '{print $1}'`
  8. echo -e "当前处理的是第${N},\t内容是:$Var1,\t它的第一列值是$Var2"
  9. done;
复制代码
执行
#./code.sh 文件名

另外因为本人英文不好,所以提示性的语言用了中文,实际情况中可能系统设置的不是中文环境,需注意。
作者: linux_kaige    时间: 2011-06-21 22:17
不是很简单么,awk '{print $1}' filename | sed -n '1p'
第一列,第一行。
作者: cjaizss    时间: 2011-06-22 09:21
第一次执行,第二次执行?
就是你写一个脚本
./your.sh yourfile
第一次运行这个输出0,第二次输出1...
而不改变yourfile
是这个意思吗?
作者: wyeyu520    时间: 2011-06-22 10:48
while read line
do
awk '{print $1}' $line
done<filename
作者: yinyuemi    时间: 2011-06-22 12:03
while read line
do
awk '{print $1}' $line
done
wyeyu520 发表于 2011-06-22 10:48



    这个不行吧:
应该是 echo $line |awk '{print $1}'




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2