标签:
while/read/awk
示例:
while read -r i;do
echo $i | awk -F ‘:‘ ‘{print "#define " "SERVER_"$1" " "\""$2"\""}‘ >> $sfile;
echo $i | awk -F ‘:‘ ‘{print "#define " "CLIENT_"$1" " "\""$2"\""}‘ >> $cfile;
done < version
1) while 条件; do
done
2) read
$ read -r line < file
这一行命令用到了 Bash 的内置命令read
,和输入重定向操作符<</code>。
read
命令从标准输入中读取一行,并将内容保存到变量line
中。在这里,-r
选项保证读入的内容是原始的内容,意味着反斜杠转义的行为不会发生。输入重定向操作符< file
打开并读取文件file
,然后将它作为read
命令的标准输入。
记住,read
命令会删除包含在IFS
变量中出现的所有字符,IFS 的全称是 Internal Field Separator,Bash 根据 IFS 中定义的字符来分隔单词。在这里,read
命令读入的行被分隔成多个单词。默认情况下,IFS
包含空格,制表符和回车,这意味着开头和结尾的空格和制表符都会被删除。如果你想保留这些符号,可以通过设置IFS
为空来完成:
$ IFS= read -r line < file
IFS 的变化仅会影响当前的命令,这行命令可以保证读入原始的首行内容到变量line
中,同时行首与行尾的空白字符被保留。
$ while read -r line; do
# do something with $line
done < file
这是一种正确的读取文件内容的做法,read
命令放在while
循环中。当read
命令遇到文件结尾时(EOF),它会返回一个正值,导致循环判断失败终止。 记住,read
命令会删除首尾多余的空白字符,所以如果你想保留,请设置 IFS 为空值:
$ while IFS= read -r line; do
# do something with $line
done < file
如果你不想将< file
放在最后,可以通过管道将文件的内容输入到 while 循环中:
$ cat file | while IFS= read -r line; do
# do something with $line
done
$ while read -r field1 field2 field3 throwaway; do # do something with $field1, $field2, and $field3 done < file
如果在read
命令中指定多个变量名,它会将读入的内容分隔成多个字段,然后依次赋值给对应的变量,第一个字段赋值给第一个变量,第二个字段赋值给第二个变量,等等,最后将剩余的所有字段赋值给最后一个变量。这也是为什么,在上面的例子中,我们加了一个throwaway
变量,否则的话,当文件的一行大于三个字段时,第三个变量的内容会包含所有剩余的字段。 有时候,为了书写方便,可以简单地用_
来替换throwaway
变量:
$ while read -r field1 field2 field3 _; do # do something with $field1, $field2, and $field3 done < file
又或者,如果你的文件确实只有三个字段,那可以忽略它:
$ while read -r field1 field2 field3; do # do something with $field1, $field2, and $field3 done < file
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk -F ‘:‘ ‘{print "#define " "SERVER_"$1" " "\""$2"\""}‘ : -F 指定分隔符; $n:第n个字段;
标签:
原文地址:http://blog.csdn.net/suifengpiao_2011/article/details/51332783