精华内容
下载资源
问答
  • (给Linux爱好者加星标,提升Linux技能)转自:良许很多情况下,我们需要...这时候,tee 命令就派上用场啦~tee 语法格式:$ tee [OPTIONS] [FILE]这个命令有 4 个主要选项,配合这些选项可以将结果存储在一个或者多...

    (给Linux爱好者加星标,提升Linux技能)

    转自:良许

    很多情况下,我们需要保存程序/命令的输出到本地,常用的一种方法是重定向,这也是一种很好的方法。但有个问题,如果你想要做后续操作,比如要统计输出的行数等,重定向就有困难了。

    这时候,tee 命令就派上用场啦~

    tee 语法格式:

    $ tee [OPTIONS] [FILE]

    这个命令有 4 个主要选项,配合这些选项可以将结果存储在一个或者多个文件中。4 个选项介绍如下:

    Options

    NameDescription
    -a or –append用于在现有文件的末尾追加写入数据
    -i or –ignore-interrupts用于忽略中断信号
    –help用于显示此命令的所有可用选项
    –version用于显示命令的当前版本

    Files:

    即目标文件,可以是一个或者多个文件,用于存储 tee 命令的输出。

    1. tee 命令基础用法

    在 Linux 中,我们可以使用 ls -la 用来查看当前目录里文件的详细信息,想必大家都用过。现在,我们想要保存 ls -la 命令的输出到文件 output.txt 中,我们可以这样操作:

    $ ls -la | tee output.txt
    $ cat output.txt

    Output:

    在这里,第一个命令将 ls -la 的输出显示到终端,并将输出写入到文件 output.txt 。第二个命令显示了 output.txt 文件的具体内容,如下图所示:

    3723b0723217312e0abf7e8e33f9e757.png

    2. 将输出追加到现有文件中

    如果我们使用带有 -a 项的 tee 命令的话,那么它会将命令的输出追加写入到现有文件,不会覆盖该文件原有的内容。

    例如,我们想将 pwd 命令的输出追加到已有文件 output.txt 的末尾,可以这样运行以下命令:

    $ pwd | tee -a output.txt
    $ cat output.txt

    在这里,第一个命令将 pwd 的输出显示到终端,并在 output.txt 文件的末尾追加 pwd 的输出。第二个命令则用于查看输出文件的内容。如下图所示, output.txt 文件包含前一个示例和当前示例的输出

    cdb71b53068d5e91644fbc683e2a3f5e.png

    3. 输出写入多个文件

    tee 命令也可以将各种命令的输出存储到多个文件中。这种情况下,我们需要使用空格隔开这些文件名。比如,我们想将 date 命令的输出存储到两个文件 output1.txt 和 output2.txt 中,我们可以这样执行命令:

    $ date | tee output1.txt output2.txt
    $ cat output1.txt output2.txt

    Output:

    在这里,第一个命令显示当前系统日期,并将值存储到两个文件 output1.txt 和 output2.txt 中。第二个命令显示这两个文件的内容,具体结果如下:

    53747d2e03a61cc59bc17be54ad4727f.png

    4. 忽略中断信号

    大家知道,命令/程序在收到中断信号时,将被信号所中断。如果 tee 命令在执行过程中不想被中断,我们可以使用带 -i 选项来忽略命令执行时的中断信号。这种情况下,即使我们按下 CTRL + C ,命令仍会正确执行。例如:

    $ wc -l output.txt | tee -i output3.txt
    $ cat output.txt
    $ cat output3.txt

    Output:

    在这里,第一个命令是计算 output.txt 文件的总行数,并将输出存储到文件 output3.txt 中。第二个命令显示了 output.txt 文件的具体内容,而第三个命令显示 output3.txt 的内容,它与 wc -l output.txt 的输出相同。

    b5f65fac9fe071e25369f633e195804e.png

    5. 将 tee 命令输出通过管道传递给另一个命令

    我们可以使用管道将 tee 命令的输出传递给另一个命令。在本例子中,ls 命令将输出传递给 tee 命令,tee 命令的输出传递给 wc 命令,如下所示:

    $ ls | tee output4.txt | wc -lcw
    $ ls
    $ cat output4.txt

    Output:

    在这里,第一个命令用于将 ls 命令的输出写入文件 output4.txt ,并计算 output4.txt 的行数、字数和字符数。第二个命令用于显示 ls 命令的输出,第三个命令用于查看 output4.txt 文件的内容。

    5e41e54fa95704edafb129bbbaf5e474.png

    6. 使用 bash 脚本执行 tee 命令

    除了 Linux 命令,tee 命令也可将 bash 脚本输出写入到文件中。比如,我们使用以下代码创建名为 add.sh 的 bash 脚本,该脚本将从命令行参数中获取两个输入数字,并打印这两个数字的和。

    add.sh

    #!/bin/bash
    a = $1
    b = $2
    ((result= $a + $b))
    echo "The addition of $a+$b=$result"

    如果我们想使用 tee 命令将 add.sh 脚本的输出写入到文件 result.txt 中,我们可以这样操作:

    $ bash add.sh 50 90 | tee result.txt
    $ cat result.txt

    Output:

    在这个例子里,数字 50 和 90 作为命令行参数传递给脚本 add.sh,然后它的输出通过 tee 命令写入到文件 result.txt 中。之后我们再用 cat 命令来查看 result.txt 文件的内容:

    97cf2ddd817fc0f6e37513f65506f7a5.png

    7. 隐藏 tee 输出

    如果我们想要将目标命令的输出直接写入文件而不在终端中显示,那我们可以将 tee 命令结果重定向到 /dev/null 中,比如:

    $ df | tee output5.txt > /dev/null
    $ cat output5.txt

    Output:

    在这里,第一个命令用于将 df 命令的输出写入文件 output5.txt 中,同时命令的结果不回显在终端中。第二个命令用于查看 output5.txt 文件内容 。

    19b92cee2db3becfd08cf455e045de46.png

    大家都学会了吗?

    推荐阅读

    (点击标题可跳转阅读)

    cat 命令的源码进化史

    玩转Bash变量

    每天一个linux命令(10):cat 命令

    看完本文有收获?请分享给更多人

    关注「Linux 爱好者」加星标,提升Linux技能

    1d8e513e829909fbc4e8d30bc86e58e1.png

    好文章,我在看❤️

    展开全文
  • pickle模块储存对象的实例

    千次阅读 2017-06-11 10:12:13
    但是,这些都是储存简单的数据类型,那么当我们需要存储一个类的实例的时候该怎么存储呢? 实际上,我们需要用到一个模块———pickle,翻译为泡菜坛子 首先贴上一个blog:pickle的使用方法 然后贴上一份代码...

    众所周知,当我们需要储存数据的时候,就需要用到重定向。但是,这些都是储存简单的数据类型,那么当我们需要存储一个类的实例的时候该怎么存储呢?

    实际上,我们需要用到一个模块———pickle,翻译为泡菜坛子

    首先贴上一个blog:pickle的使用方法


    然后贴上一份代码:

    import pickle
    
    class Person():
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def show(self):
            print(self.name + '_' + str(self.age))
    
    if __name__ == "__main__":
        a = Person('tian', 20)
        a.show()
        c = Person('babydragon' ,5)
        
        f = open('test.txt', 'wb')#这里一定要加上b,因为文件默认的write不能是bytes类型的,可以自己尝试着删去看报错
        
        pickle.dump(a, f, 0)
        pickle.dump(c, f, 0)
        f.close()
        f = open('test.txt', 'rb')
        b = pickle.load(f)
        mm = pickle.load(f)
        cc = pickle.load(f)#有点类似于迭代器的感觉,这个就很强了,因为可以储存具体的实例666
        f.close()
        b.show()
        mm.show()
        print(b.name)
    

    展开全文
  • MapReduce读/写RCFile文件

    千次阅读 2016-04-03 19:39:24
    所以,RCFile是不可以head或tail命令截取某些行重定向新文件中。由于RCFile广泛应用于Hive等系统中,所以我们就先看看MapReduce怎么读取RCFile文件。 RCFile文件转换成CSV文件 public class RCFileToCSV {

    RCFile是Facebook制定的一种高效存储结构,它结合了行存储和列存储的优点,应用于Hive,Pig等系统中。所以,RCFile是不可以用head或tail命令截取某些行重定向新文件中。由于RCFile广泛应用于Hive等系统中,所以我们就先看看用MapReduce怎么读取RCFile文件。


    RCFile文件转换成CSV文件

    public class RCFileToCSV {
    
        public static class MapKlass extends Mapper<Object, BytesRefArrayWritable, NullWritable, Text>{
    
            @Override
            protected void map(Object key, BytesRefArrayWritable values, Context context) throws IOException, InterruptedException {
               Text txt = new Text();
                StringBuilder sb = new StringBuilder();
                for(int i = 0; i < values.size(); i++){
                    BytesRefWritable value = values.get(i);
                    txt.set(value.getData(), value.getStart(), value.getLength());
                    if(i == values.size() - 1){
                        sb.append(txt.toString());
                    }
                    else {
                        sb.append(txt.toString() + "\t");
                    }
                }
                context.write(NullWritable.get(), new Text(sb.toString()));
            }
        }
    
        public static void main(String[] args)throws Exception{
            Configuration conf = new Configuration();
            String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
            for(String arg : otherArgs){
            	System.out.println(arg);
            }
            if(otherArgs.length != 2){
                System.err.println("Usage: jar <input> <output>");
                System.exit(1);
            }
    
            Job job = new Job(conf, "RCFile to TXT");
            job.setJarByClass(RCFileToCSV.class);
            job.setMapperClass(MapKlass.class);
            job.setOutputKeyClass(NullWritable.class);
            job.setOutputValueClass(Text.class);
            
            //Reduce's number is 0.
            job.setNumReduceTasks(0);
            
            job.setInputFormatClass(RCFileMapReduceInputFormat.class);
            job.setOutputFormatClass(TextOutputFormat.class);
    
            RCFileMapReduceInputFormat.addInputPath(job, new Path(otherArgs[0]));
            FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    
            System.exit(job.waitForCompletion(true) ? 0 : 1);
        }
    }

    CSV文件转换问RCFile文件

    public class CSVToRCFile {
    	
    	public static class ToRCFileMapper extends Mapper<Object, Text, NullWritable, BytesRefArrayWritable>{
    		
    		private byte[] fieldData;
    		private int numCols;
    		private BytesRefArrayWritable bytes;
    		
    		@Override
    		protected void setup(Context context)
    				throws IOException, InterruptedException {
    			// TODO Auto-generated method stub
    			numCols = context.getConfiguration().getInt("hive.io.rcfile.column.number.conf", 0);
    			bytes = new BytesRefArrayWritable(numCols);
    		}
    		
    		@Override
    		protected void map(Object key, Text values,
    				Context context)
    				throws IOException, InterruptedException {
    			// TODO Auto-generated method stub
    			bytes.clear();
    			String[] cols = values.toString().split(",");
    			for(int i = 0; i < numCols; i++){
    				fieldData = cols[i].getBytes("UTF-8");
    				BytesRefWritable cu = new BytesRefWritable(fieldData, 0, fieldData.length);
    				bytes.set(i, cu);
    			}
    			context.write(NullWritable.get(), bytes);
    		}
    	}
    
    	public static void main(String[] args)throws Exception {
    		// TODO Auto-generated method stub
    		int rowGroupSize = 16 * 1024 * 1024;
    		int ioBufferSize = 128 * 1024;
    		int numCols = 0;
    		Configuration conf = new Configuration();
    		String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    		if(otherArgs.length != 4){
    			System.err.println("Usage: <txt> <rcfile> <table name> <column number>");
    			System.exit(1);
    		}
    		
    		conf.setInt("hive.io.rcfile.record.buffer.size", rowGroupSize);
    		conf.setInt("io.file.buffer.size", ioBufferSize);
    		numCols = Integer.parseInt(otherArgs[3]);
    		
    		Job job = new Job(conf, "TXT to RCFile");
    		job.setJarByClass(CSVToRCFile.class);
    		job.setMapperClass(ToRCFileMapper.class);
    		job.setMapOutputKeyClass(NullWritable.class);
    		job.setMapOutputValueClass(BytesRefArrayWritable.class);
    		
    		//Reduce's number is 0.
            job.setNumReduceTasks(0);
    		
    		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    		job.setOutputFormatClass(RCFileMapReduceOutputFormat.class);
    		RCFileMapReduceOutputFormat.setColumnNumber(job.getConfiguration(), numCols);
    		RCFileMapReduceOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    		RCFileMapReduceOutputFormat.setCompressOutput(job, false);
    		
    		System.exit(job.waitForCompletion(true) ? 0 : 1);
    	}
    }

    注意:Hadoop和Hive的版本匹配。



    参考文献:

    http://www.thebigdata.cn/Hadoop/14976.html

    http://www.tuicool.com/articles/YNfQn2



    展开全文
  • 易学C++,C++入门

    2009-12-06 14:30:11
     5.3.2 怎么让输出的东西更好看   5.4 While循环   5.4.1 当型循环   5.4.2 导火索——do   5.5 方法指导   5.6 习题   第6章 好用的“工具”——函数   6.1 简单的“工具”——函数   ...
  • C语言编程要点

    2017-09-18 00:10:37
    10.1. 什么方法存储标志(flag)效率最高? 147 10.2. 什么是“位屏蔽(bit masking)”? 148 10.3. 位域(bit fields)是可移植的吗? 150 10.4. 移位和乘以2这两种方式中哪一种更好? 151 10.5. 什么是高位字节和低位字节...
  • 5.17 说真的,真有机器非零空指针吗,或者不同类型不同的表示? 地址0上到底有什么? 5.18 运行时的整数值0转换为指针以后一定是空指针吗? 5.19 如何访问位于机器地址0处的中断向量?如果我将指针值设为0,...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    内容简介 《你必须知道的495个C语言问题》以问答...5.17 说真的,真有机器非零空指针吗,或者不同类型不同的表示? 61 地址0 上到底有什么? 61 5.18 运行时的整数值0转换为指针以后一定是空指针吗? 61 5.19...
  • 5.17 说真的,真有机器非零空指针吗,或者不同类型不同的表示? 61 地址0 上到底有什么? 61 5.18 运行时的整数值0转换为指针以后一定是空指针吗? 61 5.19 如何访问位于机器地址0处的中断向量?如果我将...
  • 3.4.8 UNIX中的输入和输出重定向 41 3.4.9 防止文件被覆盖 41 3.5 UNIX中文件和目录的浏览 42 3.5.1 UNIX系统中的文件 42 3.5.2 链接文件 42 3.5.3 管理文件 42 3.5.4 权限:读/写UNIX的文件 43 ...
  • 【*JVM】查看jvm虚拟机里面堆、线程的信息,你过什么命令? 59 【JVM】垃圾回收算法有哪些? 59 引用计数法(Reference Counting Collector) 59 tracing算法(Tracing Collector) 61 compacting算法(Compacting ...
  • asp.net知识库

    2015-06-18 08:45:45
    怎么在ASP.NET 2.0中使用Membership asp.net 2.0-实现数据访问(1) ASP.NET 2.0 新特性 .NET 2.0里使用强类型数据创建多层应用 在MastPage中引用脚本资源 2.0正式版中callback的一些变化+使用示例(ASP.NET 2.0)...
  • java面试宝典

    2013-02-28 16:04:01
    129、在JSP中如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、在一个JSP的请求处理中如何停止...
  • 千方百计笔试题大全

    2011-11-30 21:58:33
    129、在JSP中如何执行浏览重定向? 32 130、如何防止在JSP或SERVLET中的输出不被BROWSER保存在CACHE中? 32 131、在JSP中如何设置COOKIE? 32 132、在JSP中如何删除一个COOKIE? 32 133、在一个JSP的请求处理中如何停止...
  • 1 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机...
  • 1 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机...
  • 1 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机...
  • 1 理解计算机是怎么运行程序的 2 运行一个已解释的程序 3 运行一个已编译的程序 4 C++在哪里 5 理解Visual c++中的程序文件 6 创建源代码文件 7 理解并创建头文件 第二章 结构和语法 8 理解计算机语言 9 理解计算机...
  • 关於通讯的指令.........................................................................................................21 十. 编译器( Compiler ).......................................................
  • 疯狂JAVA讲义

    2014-10-17 13:35:01
    学生提问:当我们使用编译C程序时,不仅需要指定存放目标文件的位置,也需要指定目标文件的文件名,这里使用javac编译Java程序时怎么不需要指定目标文件的文件名呢? 13 1.5.3 运行Java程序 14 1.5.4 根据...
  •  注意:这些结果被静态存储,并用于本次会话。如果在本次会话期间磁盘配置发生变化,为获得更新的扫描,必须先重新启动计算机,然后再次扫描磁盘。  bootcfg /list 列出引导列表中已有的条目。  bootcfg /...
  • javascript函数的解释

    2011-02-26 11:03:52
    其实就是搞清做什么,怎么做的问题,先把流程图画出来,拆解开,一个个做好了然后再合并。理论的东西我不会讲,直接举例哈! function g(o){return document.getElementById(o);} function hitover(n) { for(i=1...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
热门标签
关键字:

存储重定向怎么用