linux shell 读文件按行处理

一种方式是用 cat和反引号

ps:反引号在Linux中起着命令替换的作用。命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置。

输入格式如下:

20151207 [email protected].com

20151225 155581558905678

如下

内部字段分隔符(Internal Field Separator, IFS)是shell脚本中的一个重要概念。IFS是存储定界符的环境变量。它是当前shell环境使用的默认定界字符串,例:
    data=”name, sex, rollno, location”    #我们可以使用IFS读取变量中的每一个条目
    oldIFS=$IFS
    IFS=”,”
    for item in $data
    do
         echo Item: $item
    done
    IFS=$oldIFS
count=0
for line in `cat data.txt`
do
  IFS=$' '
  for value in $line
   do
  count=$[$count+1]
    echo $value
   done
#echo $line

done

一种是用管道或者重定向

 ‘ | ‘表示管道连接,在linux中管道就是一个特殊的文件描述符。

管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间,这是它与有名管道的最大区别。

有名管道叫named pipe或者FIFO(先进先出),可以用函数mkfifo()创建。

# second example
cat data.txt |  while read line
do
 for var in $line
 do
   echo $var
 done
done 
				
时间: 2024-10-08 07:40:40

linux shell 读文件按行处理的相关文章

Linux中一个文件10行内容,如何输出5-8内容到屏幕

题目是这样的,Linux中一个文件10行内容,如何输出5-8内容到屏幕首先我们模拟一下这样的环境: [root@localhost question]# pwd /root/question [root@localhost question]# seq 1 10 > q.txt [root@localhost question]# cat q.txt 1 2 3 4 5 6 7 8 9 10 我们的任务是取5-8行输出: 第一种方法: [root@localhost question]# sed

在window上使用 linux shell 删除文件夹递归地

目的 在windows环境下, 整理代码,代码中含有 .svn 文件夹, 此文件夹在所有受控目录下都存在, 需要统一删除. 但是对windows的shell不熟悉,想用linux rm来删除, 如何实现? 方法 1.找到运行linux shell的工具, cygwin限制为安装目录. git工具可以执行shell,正适合此场景. 2. 鼠标右键点击目录目录, 选择 “git bash here” 3. 执行如下命令: find . -name ".svn"  | xargs rm -r

[转] Linux shell判断文件和文件夹是否存在

shell判断文件,目录是否存在或者具有权限 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" #这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 if [ ! -x "$myPath"]; then mkdir "$myPath" fi #这里的-d 参数判断$myPath是否存在 if [ ! -d "$m

转:在linux中vi 文件里行尾奇怪的^M及解决

Linux编辑器vim中删除行尾的^M 有时候,在 Linux 中使用打开曾在 Windows 中编辑过的文件时,会在行尾看到 ^M 字符.看起来总是感觉很别扭. 删除方法如下: 在 Vim 的命令模式中输入 :%s/^M$//g 后,回车即会自动删除该文件中的所有 ^M 字符. 注意: ^M 要用 Ctrl + v, Ctrl + m 来输入, 用键盘直接敲^和M是不行的! 后面的 $ 代表匹配行尾的内容,最后的 g 则表示每行中匹配到的内容都要置换--全局替换,否则只替换每行中匹配到的第一个

[Linux] Linux Shell查找文件

#!/bin/bash # 查找当前目录中所有大于1mb的文件,把文件名写到文本文件中,统计个数 # # find命令,参数:路径地址,命令参数,-size n (查找长度为n的文件) -type f (查找某类型文件,f普通文件) # tee命令 参数:文件名 (把输入数据保存成文件) # | 管道符号 把第一个命令的执行结果传给第二个命令 # wc统计命令,参数:-l (统计行数) find ./ -size +1k -type f | tee bigfile.txt | wc -l #!/

linux shell 获取文件夹全文绝对路径

在ls中列出文件的绝对路径 ls | sed "s:^:`pwd`/:" # 就是在每行记录的开头加上当前路径 ps: #在所有行之前/后加入某个字符串 sed 's/^/string/g' file sed 's/$/string/g' file find $PWD -maxdepth 1 | xargs ls -ld # 列出当前目录下的所有文件(包括隐藏文件)的绝对路径, 对目录不做递归 find $PWD | xargs ls -ld # 递归列出当前目录下的所有文件(包括隐藏

linux shell 递归统计代码行数

一句话: find /path -name '*.cpp' |xargs wc -l

shell读文件的两种方法

[[email protected] local]# cat read_line.sh  #!/bin/bash for i in `cat file.txt` do     echo $i done echo  while read line do     echo $line done < file.txt

Linux awk 在文件每行后面增加个时间戳

[[email protected] ~]# for line in `cat /etc/passwd`;do echo $line|awk '{ print $0" " strftime("%Y-%m-%d %H:%M:%S",systime())}' && sleep 2;done root:x:0:0:root:/root:/bin/bash 2017-08-30 11:34:01 bin:x:1:1:bin:/bin:/sbin/nologi