如何为while循环中的变量分配行号

时间:2015-07-06 03:01:44

标签: shell awk while-loop

我有一个文件包含一些行。现在我想读取行并获取行号。如下:

while read line
do
string=$line
number=`awk '{print NR}'`  # This way is not right, gets all the line numbers.
done

这是我的场景:我有一个文件,包含一些行,如下所示:

2015Y7M3D0H0Mi44S7941
2015Y7M3D22H24Mi3S7927
2015Y7M3D21H28Mi21S5001

我想读取此文件的每一行,打印出以“S”开头的最后一个字符及其行号。看起来像是:

1  S7941
2  S7927
3  S5001

那么,我应该做些什么才能得到这个呢?

感谢。

任何人都可以帮我吗???

2 个答案:

答案 0 :(得分:0)

我刚问过我的一位朋友,找到了一个简单的方法:

cat -n $file |while read line
do
   number=echo $line | cut -d " " -f 1
   echo $number
done

这意味着如果我们无法从文件本身获取行号,我们会使用行号传递它。

答案 1 :(得分:0)

UNIX shell只是一个可以调用工具和语言来对这些调用进行排序的环境。 UNIX通用文本处理工具是awk所以只需使用它:

$ awk '{sub(/.*S/,NR" S")}1' file
1 S7941
2 S7927
3 S5001

如果您要进行任何文本操作,请阅读Arnold Robbins撰写的Effective Awk Programming,第4版。