分页: 1 / 1
read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-21 18:27
由 糊涂的小强
[xxx@localhost ~]$ while read line1; do awk '{print $0}'; done < test_read
1234 456
[xxx@localhost ~]$ while read line1; do echo "$line1";awk '{print $0}'; done < test_read1
123 1234
234 456
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-21 19:52
由 zhw2101024
输入文件什么样的?
read每一次读的不一定是一行,具体可以搜索IFS
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-21 20:12
由 糊涂的小强
zhw2101024 写了:输入文件什么样的?
read每一次读的不一定是一行,具体可以搜索IFS
文件内容很简单:
123 1234
234 456
这根分割符有什么关系
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-23 20:17
由 astolia
一个是test_read,另一个test_read1,确定两个文件内容一致?
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-26 17:42
由 糊涂的小强
astolia 写了:一个是test_read,另一个test_read1,确定两个文件内容一致?
代码: 全选
[xxx@localhost ~]$ while read line1; do awk '{print $0}'; done < test_read1
234 456
[xxx@localhost ~]$ while read line1; do echo "$line1";awk '{print $0}'; done < test_read1
123 1234
234 456
[xxx@localhost ~]$ cat test_read1
123 1234
234 456
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-26 19:35
由 astolia
糊涂的小强 写了:astolia 写了:一个是test_read,另一个test_read1,确定两个文件内容一致?
代码: 全选
[xxx@localhost ~]$ while read line1; do awk '{print $0}'; done < test_read1
234 456
[xxx@localhost ~]$ while read line1; do echo "$line1";awk '{print $0}'; done < test_read1
123 1234
234 456
[xxx@localhost ~]$ cat test_read1
123 1234
234 456
这才对嘛。一楼的肯定是读了两个不同的文件。
标准输入被重定向到了test_read1,read和awk都从里面读数据。
在第一次循环时,read首先读了一行“123 1234”,存放到line1变量中,然后awk再读剩余的一行“234 456”。
在第二次循环时,read没有读到东西,返回非0值,退出while循环。
所以如果不输出line1的内容就只有awk读到的234 456
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-27 9:38
由 糊涂的小强
astolia 写了:糊涂的小强 写了:astolia 写了:一个是test_read,另一个test_read1,确定两个文件内容一致?
代码: 全选
[xxx@localhost ~]$ while read line1; do awk '{print $0}'; done < test_read1
234 456
[xxx@localhost ~]$ while read line1; do echo "$line1";awk '{print $0}'; done < test_read1
123 1234
234 456
[xxx@localhost ~]$ cat test_read1
123 1234
234 456
这才对嘛。一楼的肯定是读了两个不同的文件。
标准输入被重定向到了test_read1,read和awk都从里面读数据。
在第一次循环时,read首先读了一行“123 1234”,存放到line1变量中,然后awk再读剩余的一行“234 456”。
在第二次循环时,read没有读到东西,返回非0值,退出while循环。
所以如果不输出line1的内容就只有awk读到的234 456
等等,我无法接受这样的逻辑,read和awk之间有关联吗,read读过的,awk就知道只去读第二行,这是什么机制
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-27 12:08
由 astolia
糊涂的小强 写了:等等,我无法接受这样的逻辑,read和awk之间有关联吗,read读过的,awk就知道只去读第二行,这是什么机制
本来有若干行数据,read读了一行后,这行数据就被read拿走了,awk就只能从剩下的里面读了
你回想一下C里面的基本I/O函数,也是一样的嘛。
先用scanf读了数据,再用getchar也不会读到scanf得到的数据。
先用fscanf读了数据,再用fgetc也不会读到fscanf得到的数据。
具体从是文件读还是从终端读,底层实现会不同,但效果都是这样的
Re: read,echo,awk三者不同组合得到的结果不一样,但不明白,附实例
发表于 : 2014-05-27 12:58
由 糊涂的小强
astolia 写了:糊涂的小强 写了:等等,我无法接受这样的逻辑,read和awk之间有关联吗,read读过的,awk就知道只去读第二行,这是什么机制
本来有若干行数据,read读了一行后,这行数据就被read拿走了,awk就只能从剩下的里面读了
你回想一下C里面的基本I/O函数,也是一样的嘛。
先用scanf读了数据,再用getchar也不会读到scanf得到的数据。
先用fscanf读了数据,再用fgetc也不会读到fscanf得到的数据。
具体从是文件读还是从终端读,底层实现会不同,但效果都是这样的

谢谢