精华内容
下载资源
问答
  • linux文件排序
    千次阅读
    2020-09-29 16:04:21

    转自: https://man.linuxde.net/sort 侵删

    链接取自: https://blog.csdn.net/yilovexing/article/details/79013692

    最近想要做数据库的增量备份和还原   自己定义了增量备份的文件夹是inc_1-----inc_100这样的, 想要给文件夹排序, 得到最新的文件夹名字, 其中波折就不说了, 得到以下命令可以得到最新的一个inc_*文件夹名字:

    ls -d inc_*/ | sort -k1.5n | tail -n 1

    说说 sort -k1.5n 

    指的是从第一个域的第五个字符开始到本域的最后一个字符为止的数字进行排序, 也就是说inc_后面的数字按照自然顺序排列

    tail -n 1

    得到最后的一个文件夹, 这里我的目的就达到了

    以下从https://man.linuxde.net/sort复制以免丢失

    -------------------------------------------------------------------------------------------------------------------------------------------------------------

    sort命令

    文件过滤分割与合并

    sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。sort命令既可以从特定的文件,也可以从stdin中获取输入。

    语法

    sort(选项)(参数)

    选项

    -b:忽略每行前面开始出的空格字符;
    -c:检查文件是否已经按照顺序排序;
    -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
    -f:排序时,将小写字母视为大写字母;
    -i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符;
    -m:将几个排序号的文件进行合并;
    -M:将前面3个字母依照月份的缩写进行排序;
    -n:依照数值的大小排序;
    -o<输出文件>:将排序后的结果存入制定的文件;
    -r:以相反的顺序来排序;
    -t<分隔字符>:指定排序时所用的栏位分隔字符;
    +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。

    参数

    文件:指定待排序的文件列表。

    实例

    sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

    [root@mail text]# cat sort.txt
    aaa:10:1.1
    ccc:30:3.3
    ddd:40:4.4
    bbb:20:2.2
    eee:50:5.5
    eee:50:5.5
    
    [root@mail text]# sort sort.txt
    aaa:10:1.1
    bbb:20:2.2
    ccc:30:3.3
    ddd:40:4.4
    eee:50:5.5
    eee:50:5.5

    忽略相同行使用-u选项或者uniq

    [root@mail text]# cat sort.txt
    aaa:10:1.1
    ccc:30:3.3
    ddd:40:4.4
    bbb:20:2.2
    eee:50:5.5
    eee:50:5.5
    
    [root@mail text]# sort -u sort.txt
    aaa:10:1.1
    bbb:20:2.2
    ccc:30:3.3
    ddd:40:4.4
    eee:50:5.5
    
    或者
    
    [root@mail text]# uniq sort.txt
    aaa:10:1.1
    ccc:30:3.3
    ddd:40:4.4
    bbb:20:2.2
    eee:50:5.5
    

    sort的-n、-r、-k、-t选项的使用:

    [root@mail text]# cat sort.txt
    AAA:BB:CC
    aaa:30:1.6
    ccc:50:3.3
    ddd:20:4.2
    bbb:10:2.5
    eee:40:5.4
    eee:60:5.1
    
    #将BB列按照数字从小到大顺序排列:
    [root@mail text]# sort -nk 2 -t: sort.txt
    AAA:BB:CC
    bbb:10:2.5
    ddd:20:4.2
    aaa:30:1.6
    eee:40:5.4
    ccc:50:3.3
    eee:60:5.1
    
    #将CC列数字从大到小顺序排列:
    [root@mail text]# sort -nrk 3 -t: sort.txt
    eee:40:5.4
    eee:60:5.1
    ddd:20:4.2
    ccc:50:3.3
    bbb:10:2.5
    aaa:30:1.6
    AAA:BB:CC
    
    # -n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号

    -k选项的具体语法格式:

    -k选项的语法格式:

    FStart.CStart Modifie,FEnd.CEnd Modifier
    -------Start--------,-------End--------
     FStart.CStart 选项  ,  FEnd.CEnd 选项
    

    这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStartC.StartC.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

    从公司英文名称的第二个字母开始进行排序:

    $ sort -t ' ' -k 1.2 facebook.txt
    baidu 100 5000
    sohu 100 4500
    google 110 5000
    guge 50 3000
    

    使用了-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。

    只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

    $ sort -t ' ' -k 1.2,1.2 -nrk 3,3 facebook.txt
    baidu 100 5000
    google 110 5000
    sohu 100 4500
    guge 50 3000
    

    由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们“只”对第二个字母进行排序。(如果你问“我使用-k 1.2怎么不行?”,当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。对于员工工资进行排 序,我们也使用了-k 3,3,这是最准确的表述,表示我们“只”对本域进行排序,因为如果你省略了后面的3,就变成了我们“对第3个域开始到最后一个域位置的内容进行排序” 了。

    更多相关内容
  • /y:禁止提示以确认改写一个现存目标文件,就是不提醒,就直接覆盖在复制文件的目的文件夹中已经存在的文件  /c:即使有错误,也继续复制,就是说,如果文件被占有等,如果复制出错,任然会复制 &goto end 是...

    @echo off
    set nowDate=%date:~0,4%%date:~5,2%%date:~8,2%
    set fromPath=D:\copy\
    set endPath=E:\temp\parse\3HourRefine\
    for /f %%a in ('dir %fromPath%t639%nowDate%.txt /b/a-d/a-h/a-s/o-d/tc') do (
      xcopy "%fromPath%%%a" "%endPath%" /k /y /c
    )&goto end
    :end

    &exit

     

    代码说明:
         echo off 关闭在cmd窗口的语句输出
         set nowDate 设置变量,获取变量的的方法:%nowDate%
         set nowDate = %date:~0,4%%date:~5,2%%date:~8,2%获取当前系统的日期,日期格式:yyyyyMMdd
         set fromPath=D:\copy\ 设置复制文件的目录

         set endpath =E:\temp\parse\3HourRefine\ 设置复制文件的存放位置

    /f for循环的参数,可以自行百度, %%a 声明变量a,每一次循环,把for循环获取的内容,复制给a

         in() 设置循环的内容

         do() 获取变量后需要进行的操作、

    dir 遍历获取文件的批处理,参数说明: dir [drive:][path][filename] [...] [/p] [/w] [/d] [/a[:]attributes][/o[:]sortorder] [/t[:]timefield] [/s] [/b] [/l] [/n] [/x] [/c]

    具体参数说明:

            drive 盘符, path 路径,fileName 文件名,在文件名中可以通过*,?进行文件名的匹配 ,其他的参数,可以参考下面的参考博客

            部分参数说明:/b:列出每个目录名或文件名,每行一个(包含文件扩展名),注意只显示文件名,其他的都不显示
            /a-d:/a 显示所有的文件,-d 只是文件,/a-d 显示说有的只是文件的文件
            /a-h:-h 非隐藏的文件,/a-h 不是隐藏文件的文件
            /a-s:-s 系统文件以为的文件,/a-s 不是系统文件的文件
            /od:/o 文件的排序顺序,d 按日期和时间,最早的优先,/od 按照文件的时间排序,最早的在最前面
            /tc:/t 控制心事或用户排序的时间字段,c 创建,/tc 按照文件的创建时间进行排序
    xcopy "%fromPath%%%a" "%endPath%" /k /y /c 进行文件复制
            "%fromPath%%%a" 需要复制的文件
            "%endPath%" 文件复制的目的文件目录
            /k:复制属性。一般的 Xcopy 会重设只读属性
            /y:禁止提示以确认改写一个现存目标文件,就是不提醒,就直接覆盖在复制文件的目的文件夹中已经存在的文件

            /c:即使有错误,也继续复制,就是说,如果文件被占有等,如果复制出错,任然会复制

    &goto end 是为了只获取for循环的第一个数据,获取到就跳转到end位置

    :end 标记end的位置

    &exit 退出

     

     

    for命令详解

    FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!

    看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)
    FOR 参数 %%变量名 IN (相关文件或命令) DO 执行的命令

    参数:FOR有4个参数 /d   /l   /r   /f   他们的作用我在下面用例子解释 
    %%变量名 :这个变量名可以是小写a-z或者大写A-Z,他们区分大小写,FOR会把每个读取到的值给他; 
    IN:命令的格式,照写就是了; 
    (相关文件或命令) :FOR要把什么东西读取然后赋值给变量,看下面的例子 
    do:命令的格式,照写就是了! 
    执行的命令:对每个变量的值要执行什么操作就写在这.

    可以在CMD输入for /?看系统提供的帮助!对照一下 
    FOR %%variable IN (set) DO command [command-parameters]

    %%variable 指定一个单一字母可替换的参数。 
    (set)      指定一个或一组文件。可以使用通配符。 
    command    指定对每个文件执行的命令。 
    command-parameters 
                 为特定命令指定参数或命令行开关。


    现在开始讲每个参数的意思

    /d 
    仅为目录 
    如果 Set (也就是我上面写的 "相关文件或命令") 包含通配符(* 和 ?),将对与 Set 相匹配的每个目

    录(而不是指定目录中的文件组)执行指定的 Command。

    系统帮助的格式:FOR /D %%variable IN (set) DO command 
    他主要用于目录搜索,不会搜索文件,看这样的例子

    @echo off 
    for /d %%i in (*) do @echo %%i 
    pause

    把他保存放在C盘根目录执行,就会把C盘目录下的全部目录名字打印出来,而文件名字一个也不显示! 
    在来一个,比如我们要把当前路径下文件夹的名字只有1-3个字母的打出来

    @echo off 
    for /d %%i in (???) do @echo %%i 
    pause

    这样的话如果你当前目录下有目录名字只有1-3个字母的,就会显示出来,没有就不显示了


    思考题目:

    @echo off 
    for /d %%i in (window?) do @echo %%i 
    pause

    保存到C盘下执行,会显示什么呢?自己看吧! 
    /D参数只能显示当前目录下的目录名字,这个大家要注意!

    /R 
    递归 
    进入根目录树 [Drive:]Path,在树的每个目录中执行 for 语句。如果在 /R 后没有指定目录,则认为是

    当前目录。如果 Set 只是一个句点 (.),则只枚举目录树。 
    系统帮助的格式:FOR /R [[drive:]path] %%variable IN (set) DO command

    上面我们知道,/D只能显示当前路径下的目录名字,那么现在这个/R也是和目录有关,他能干嘛呢?放心他比

    /D强大多了! 
    他可以把当前或者你指定路径下的文件名字全部读取,注意是文件名字,有什么用看例子!

    @echo off 
    for /r c:\ %%i in (*.exe) do @echo %%i 
    pause

    咋们把这个BAT保存到D盘随便哪里然后执行,我会就会看到,他把C盘根目录,和每个目录的子目录下面全部

    的EXE文件都列出来了,这里的c:\就是目录了。

    再来一个 
    @echo off 
    for /r %%i in (*.exe) do @echo %%i 
    pause

    参数不一样了,这个命令前面没加那个C:\也就是搜索路径,这样他就会以当前目录为搜索路径,比如你这

    个BAT你把他防灾d:\test目录下执行,那么他就会把D:\test目录和他下面的子目录的全部EXE文件列出

    来!!!


    /L 
    迭代数值范围 
    使用迭代变量设置起始值 (Start#),然后逐步执行一组范围的值,直到该值超过所设置的终止值 (End#)

    。/L 将通过对 Start# 与 End# 进行比较来执行迭代变量。如果 Start# 小于 End#,就会执行该命令。

    如果迭代变量超过 End#,则命令解释程序退出此循环。还可以使用负的 Step# 以递减数值的方式逐步执

    行此范围内的值。例如,(1,1,5) 生成序列 1 2 3 4 5,而 (5,-1,1) 则生成序列 (5 4 3 2 1)。语法是:

    系统帮助的格式:for /L %% Variable in (Start#,Step#,End#) do Command

    例如:

    @echo off 
    for /l %%i in (1,1,5) do @echo %%i 
    pause

    保存执行看效果,他会打印从1 2 3 4 5 这样5个数字 
    (1,1,5)这个参数也就是表示从1开始每次加1直到5终止!

    再看这个例子 
    @echo off 
    for /l %%i in (1,1,5) do start cmd 
    pause

    执行后是不是吓了一跳,怎么多了5个CMD窗口,呵呵!如果把那个 (1,1,5)改成 (1,1,65535)会有什么结果,

    我先告诉大家,会打开65535个CMD窗口....这么多你不死机算你强!

    当然我们也可以把那个start cmd改成md %%i 这样就会建立指定个目录了!!!名字为1-65535

    看完这个被我赋予破坏性质的参数后,我们来看最后一个参数

    /f

    含有/F的for详细说明

    含有/F的for有很大的用处,在批处理中使用的最多,用法如下: 
    格式: 
    FOR /F ["options"] %%i IN (file) DO command

    FOR /F ["options"] %%i IN ("string") DO command

    FOR /F ["options"] %%i IN ('command') DO command

    这个可能是最常用的,也是最强的命令,主要用来处理文件和一些命令的输出结果。

    file代表一个或多个文件

    string 代表字符串

    command代表命令

    ["options"] 可选

    对于FOR /F %%i IN (file) DO command

    file为文件名,按照官方的说法是,for会依次将file中的文件打开,并且在进行到下一个文件之前将每个文件读取到内存,按照每一行分成一个一个的元素,忽略空白的行,看个例子。

    假如文件a.txt中有如下内容:

    第1行第1列 第1行第2列 第1行第3列 
    第2行第1列 第2行第2列 第2行第3列 
    第3行第1列 第3行第2列 第3行第3列

    你想显示a.txt中的内容,会用什么命令呢?当然是type,type a.txt

    for也可以完成同样的命令:

    for /f %%i in (a.txt) do echo %%i

    还是先从括号执行,因为含有参数/f,所以for会先打开a.txt,然后读出a.txt里面的所有内容,把它作为一个集合,并且以每一行作为一个元素,所以会产生这样的集合,

    {"第1行第1列 第1行第2列 第1行第3列", //第一个元素

    "第2行第1列 第2行第2列 第2行第3列", //第二个元素

    "第3行第1列 第3行第2列 第3行第3列"}   //第三个元素

    集合中只有3个元素,同样用%%i依次代替每个元素,然后执行do后面的命令。

    具体过程:

    用%%i代替"第1行第1列 第1行第2列 第1行第3列",执行do后面的echo %%i,显示"第1行第1列 第1行第2列 第1行第3列",

    用%%i代替"第2行第1列 第2行第2列 第2行第3列",执行echo %%i,显示"第2行第1列 第2行第2列 第2行第3列",

    依次,直到每个元素都代替完为止。

    为了加强理解/f的作用,请执行一下两个命令,对比即可明白:

    for /f %%i in (a.txt) do echo %%i //这个会显示a.txt里面的内容,因为/f的作用,会读出a.txt中 
    的内容。

    for %%i in (a.txt) do echo %%i //而这个只会显示a.txt这个名字,并不会读取其中的内容。

    通过上面的学习,我们发现for /f会默认以每一行来作为一个元素,但是如果我们还想把每一行再分解更小的内容,该怎么办呢?不用担心,for命令还为我们提供了更详细的参数,使我们将每一行分为更小的元素成为可能。

    它们就是:delims和tokens

    delims 用来告诉for每一行应该拿什么作为分隔符,默认的分隔符是空格和tab键

    比如,还是上面的文件,我们执行下面的命令:

    for /f "delims= " %%i in (a.txt) do echo %%i

    显示的结果是:

    第1行第1列 
    第2行第1列 
    第3行第1列

    为什么是这样的呢。因为这里有了delims这个参数,=后面有一个空格,意思是再将每个元素以空格分割,默认是只取分割之后的第一个元素。

    执行过程是:

    将第一个元素"第1行第1列 第1行第2列 第1行第3列"分成三个元素:"第1行第1列" "第1行第2列" "第1行第3列",它默认只取第一个,即"第1行第1列",然后执行do后面的命令,依次类推。

    但是这样还是有局限的,如果我们想要每一行的第二列元素,那又如何呢?

    这时候,tokens跳出来说,我能做到。

    它的作用就是当你通过delims将每一行分为更小的元素时,由它来控制要取哪一个或哪几个。

    还是上面的例子,执行如下命令:

    for /f "tokens=2 delims= " %%i in (a.txt) do echo %%i

    执行结果:

    第1行第2列 
    第2行第2列 
    第3行第2列

    如果要显示第三列,那就换成tokens=3。

    同时tokens支持通配符*,以及限定范围。

    如果要显示第二列和第三列,则换成tokens=2,3或tokens=2-3,如果还有更多的则为:tokens=2-10之类的。

    此时的命令为:

    for /f "tokens=2,3 delims= " %%i in (a.txt) do echo %%i %%j

    怎么多出一个%%j?

    这是因为你的tokens后面要取每一行的两列,用%%i来替换第二列,用%%j来替换第三列。

    并且必须是按照英文字母顺序排列的,%%j不能换成%%k,因为i后面是j

    执行结果为:

    第1行第2列 第1行第3列 
    第2行第2列 第2行第3列 
    第3行第2列 第3行第3列

    对以通配符*,就是把这一行全部或者这一行的剩余部分当作一个元素了。

    比如:

    for /f "tokens=* delims= " %%i in (a.txt) do echo %%i

    执行结果为:

    第1行第1列 第1行第2列 第1行第3列 
    第2行第1列 第2行第2列 第2行第3列 
    第3行第1列 第3行第2列 第3行第3列

    其实就跟for /f %%i in (a.txt) do echo %%i的执行结果是一样的。

    再如:

    for /f "tokens=2,* delims= " %%i in (a.txt) do echo %%i %%j

    执行结果为:

    第1行第2列 第1行第3列 
    第2行第2列 第2行第3列 
    第3行第2列 第3行第3列

    用%%i代替第二列,用%%j代替剩余的所有

    最后还有skip合eol,这俩个简单,skip就是要忽略文件的前多少行,而eol用来指定当一行以什么符号开始时,就忽略它。

    比如:

    for /f "skip=2 tokens=*" %%i in (a.txt) do echo %%i

    结果为:

    第3行第1列 第3行第2列 第3行第3列

    用skip来告诉for跳过前两行。

    如果不加tokens=*的话,执行结果为:

    第3行第1列

    不知道怎么回事。

    再如,当a.txt内容变成:

    .第1行第1列 第1行第2列 第1行第3列 
    .第2行第1列 第2行第2列 第2行第3列 
    第3行第1列 第3行第2列 第3行第3列

    执行for /f "eol=. tokens=*" %%i in (a.txt) do echo %%i结果是:

    第3行第1列 第3行第2列 第3行第3列

    用eol来告诉for忽略以"."开头的行。

    同样也必须加tokens=*,否则只会显示"第3行第1列"

    转载于:https://my.oschina.net/u/3803446/blog/1827223

    展开全文
  • 一、实验目的 通过实验掌握基本的MapReduce编程方法;...要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第

    一、实验目的

    1. 通过实验掌握基本的MapReduce编程方法;
    2. 掌握用MapReduce解决一些常见的数据处理问题,包括数据去重、数据排序和数据挖掘等。

    二、实验平台

    1. 操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04)
    2. Hadoop版本:3.1.3

    三、实验内容

    编写程序实现对输入文件的排序

    现在有多个输入文件,每个文件中的每行内容均为一个整数。要求读取所有文件中的整数,进行升序排序后,输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数。下面是输入文件和输出文件的一个样例供参考。

    输入文件 1 的样例如下:

    33
    37
    12
    40
    

    输入文件 2 的样例如下:

    4
    16
    39
    5
    

    输入文件 3 的样例如下:

    1
    45
    25
    

    根据输入文件 1、2 和 3 得到的输出文件C的样例如下:

    1 1
    2 4
    3 5
    4 12
    5 16
    6 25
    7 33
    8 37
    9 39
    10 40
    11 45
    

    四、实验步骤

    进入 Hadoop 安装目录,启动 hadoop:

    cd /usr/local/hadoop
    sbin/start-dfs.sh
    

    新建文件夹,创建文件 1、2 和 3:

    sudo mkdir Pritice2 && cd Pritice2
    sudo vim 1
    sudo vim 2
    sudo vim 3
    

    编写 Java 文件实现 MapReduce:

    sudo vim MergeSort.java
    

    实现的 Java 代码如下:

    import java.io.IOException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.Path;
    import org.apache.hadoop.io.IntWritable;
    import org.apache.hadoop.io.Text;
    import org.apache.hadoop.mapreduce.Job;
    import org.apache.hadoop.mapreduce.Mapper;
    import org.apache.hadoop.mapreduce.Partitioner;
    import org.apache.hadoop.mapreduce.Reducer;
    import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
    import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
    import org.apache.hadoop.util.GenericOptionsParser;
    
    
    public class MergeSort {
    	/**
    	 * @param args
    	 * 输入多个文件,每个文件中的每行内容均为一个整数
    	 * 输出到一个新的文件中,输出的数据格式为每行两个整数,第一个数字为第二个整数的排序位次,第二个整数为原待排列的整数
    	 */
    	//map函数读取输入中的value,将其转化成IntWritable类型,最后作为输出key
    	public static class Map extends Mapper<Object, Text, IntWritable, IntWritable>{
    		
    		private static IntWritable data = new IntWritable();
    		public void map(Object key, Text value, Context context) throws IOException,InterruptedException{
    			String text = value.toString();
    			data.set(Integer.parseInt(text));
    			context.write(data, new IntWritable(1));
    		}
    	}
    	
    	//reduce函数将map输入的key复制到输出的value上,然后根据输入的value-list中元素的个数决定key的输出次数,定义一个全局变量line_num来代表key的位次
    	public static class Reduce extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable>{
    		private static IntWritable line_num = new IntWritable(1);
    		public void reduce(IntWritable key, Iterable<IntWritable> values, Context context) throws IOException,InterruptedException{
    			for(IntWritable val : values){
    				context.write(line_num, key);
    				line_num = new IntWritable(line_num.get() + 1);
    			}
    		}
    	}
    	
    	//自定义Partition函数,此函数根据输入数据的最大值和MapReduce框架中Partition的数量获取将输入数据按照大小分块的边界,然后根据输入数值和边界的关系返回对应的Partiton ID
    	public static class Partition extends Partitioner<IntWritable, IntWritable>{
    		public int getPartition(IntWritable key, IntWritable value, int num_Partition){
    			int Maxnumber = 65223;//int型的最大数值
    			int bound = Maxnumber/num_Partition+1;
    			int keynumber = key.get();
    			for (int i = 0; i<num_Partition; i++){
    				if(keynumber<bound * (i+1) && keynumber>=bound * i){
    					return i;
    				}
    			}
    			return -1;
    		}
    	}
    	
    	public static void main(String[] args) throws Exception{
    		// TODO Auto-generated method stub
    		Configuration conf = new Configuration();
    		conf.set("fs.default.name","hdfs://localhost:9000");
    		String[] otherArgs = new String[]{"input","output"}; /* 直接设置输入参数 */
    		if (otherArgs.length != 2) {
    			System.err.println("Usage: wordcount <in><out>");
    			System.exit(2);
    			}
    		Job job = Job.getInstance(conf,"Merge and sort");
    		job.setJarByClass(MergeSort.class);
    		job.setMapperClass(Map.class);
    		job.setReducerClass(Reduce.class);
    		job.setPartitionerClass(Partition.class);
    		job.setOutputKeyClass(IntWritable.class);
    		job.setOutputValueClass(IntWritable.class);
    		FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    		FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    		System.exit(job.waitForCompletion(true) ? 0 : 1);
    	}
    }
    

    赋予用户相关权限:

    sudo chown -R hadoop /usr/local/hadoop
    

    添加编译所需要使用的 jar 包:

    vim ~/.bashrc
    

    添加下面一行到文件的最后:

    export HADOOP_HOME=/usr/local/hadoop
    export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
    

    使更改立即生效:

    source ~/.bashrc
    

    编译 MergeSort.java:

    javac MergeSort.java
    

    打包生成的 class 文件为 jar 包:

    jar -cvf MergeSort.jar *.class
    

    创建 Hadoop 主目录为 /user/hadoop 并创建 input 文件夹:

    /usr/local/hadoop/bin/hdfs dfs -mkdir -p /user/hadoop
    /usr/local/hadoop/bin/hdfs dfs -mkdir input
    

    若 intput 已存在则删除原有文件:

    /usr/local/hadoop/bin/hdfs dfs -rm input/*
    

    上传 1、2 和 3 文件到 input 文件夹中:

    /usr/local/hadoop/bin/hdfs dfs -put ./1 input
    /usr/local/hadoop/bin/hdfs dfs -put ./2 input
    /usr/local/hadoop/bin/hdfs dfs -put ./3 input
    

    使用之前确保 output 文件夹不存在:

    /usr/local/hadoop/bin/hdfs dfs -rm -r output
    

    使用我们刚生成的 Merge.jar 包:

    /usr/local/hadoop/bin/hadoop jar MergeSort.jar MergeSort
    

    查看输出结果:

    /usr/local/hadoop/bin/hdfs dfs -cat output/*
    

    输出如下:

    hadoop@fzqs-Laptop:/usr/local/hadoop$ hdfs dfs -cat output/*
    1 1
    2 4
    3 5
    4 12
    5 16
    6 25
    7 33
    8 37
    9 39
    10 40
    11 45
    hadoop@fzqs-Laptop:/usr/local/hadoop$ 
    

    此外,有想用 Python 写的可以参考我这篇博客:实验5 MapReduce初级编程实践(Python实现)

    展开全文
  • 使用服务器时,我们不可避免的就会进行“文件交互”。通常我都是开启直接的复制粘贴,包括文本和文件都是如此。而今天使用远程桌面连接登陆服务器,发现本地电脑和远程服务器之间复制粘贴文件没有任何反应,就...

    对于目前SEO从业都来讲,站群SEO已经成为一种必然,很少人会去以单站做SEO。毕竟一个站一个站的优化,已然被时代所淘汰。而站群SEO就离不开服务器。今天要为大家分享的就是在使用服务器时常遇到的一些问题。

    在使用服务器时,我们不可避免的就会进行“文件交互”。通常我都是开启直接的复制粘贴,包括文本和文件都是如此。而今天使用远程桌面连接登陆服务器,发现本地电脑和远程服务器之间复制粘贴文件没有任何反应,就是不行了,包括文本和文件都是如此,而在此之前是可以的。严重的影响了工作效率,为此在网站搜罗了一下解决方法:

    情况说明:复制粘贴功能原本可以用,今天在未知情况下突然不能使用顾

    解决方法:重启rdpclip.exe程序,无法重启电脑

    1、打开任务管理器,查看进程,如果有 rdpclip.exe 进程,先结束该进程(通常我是先点击按文件明排序,然后输入“r”,这样可以快速找到程序)。

    b312fccbad19c0ded71b222163cae520.png如何结束rdpclip.exe 进程

    2、点击任务管理器上的->文件->运行新任务->输入框里输入“rdpclip.exe”->确定;关闭任务管理器。就可以了

    6632ac45b888dd885318b34b2613f62a.png重新运行rdpclip.exe 进程任务

    最后介绍一下rdpclip.exe

    rdpclip.exe是 Windows Server 资源工具包中提供的 Rdpclip 实用程序,它的功能就是在“终端服务”客户端(本机)和“终端”服务器(远程服务器)之间复制和粘贴文件,也包括粘贴文本。这个程序的文件路径是 c:\windows\system32\rdpclip.exe

    展开全文
  • 排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,...由于待排序的记录数量不同,使得排序过程中涉及的存储器不同,可将排序方法划分为两大类:内部排序和外部排序
  • 什么是外部排序

    千次阅读 2021-08-18 14:36:59
    内存中进行的排序是内部排序,而许多应用中,经常需要对大文件进行排序,因为文件中的记录很多、信息量庞大,无法将整个文件复制进内存中进行排序。因此,需要将待排序的记录存储在外存中,排序时再把数据一部分...
  • lua复制文件

    千次阅读 2014-03-11 16:21:16
    --功能:写入文件 --输入:文件名, 内容 --输出:生成的文件里面包含内容 function copyfile(source,destination) sourcefile = io.open(source,r) destinationfile = io.open(destination,w) for line in source...
  • 如何给磁盘文件排序

    千次阅读 2012-12-01 01:47:57
    第一节、如何给磁盘文件排序 问题描述: 输入:一个最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正整数)的文件,其中每个数都小于等于n,且n=10^7。 输出:得到按从小到大升序排列的包含所有输入...
  • 最近因为一些图片文件保持新鲜感(嘻嘻~),所以希望图片能够随机排列,我发现通过...使用方法:创建一个空白的txt文件到image文件夹的同级目录下,重命名该txt文件为“a.txt”,然后将下面代码复制到这个txt文件,再.
  • power bi 排序 In this article, I’m going to demonstrate how to sort months chronologically in Power BI. Visualizing sales data in a time period is one of the most influential ways of reporting. Oft...
  • 一、实验目的: 1. 理解MapReduce的工作机制; 2. 掌握基本的MapReduce编程方法 ...对于两个输入文件,即文件A和文件B,请编写MapReduce程序,对两个文件进行合并,并剔除其中重复的内容,得到一个新的输出文...
  • 万字手撕七大排序(代码+动图演示)

    千次阅读 多人点赞 2022-04-29 13:53:41
    万字手撕七大排序(代码+动图演示)
  • 找出文件夹(及其子文件夹)中的文件复制到目标文件夹中 1.问题引出 下载了整个2018年和2019年上半年的经济学人,不过是根据发刊日期建立了多个文件夹,我想复制出里面所有的*.epub格式的电子书,不可能一个一个的...
  • ##【参考】给大数据量的磁盘文件排序@(Eg - 数据结构与算法分析)[外部排序|noteton]###如何给磁盘文件排序####问题描述**输入:**给定一个文件,里面最多含有n个不重复的正整数(也就是说可能含有少于n个不重复正...
  • 冒泡排序 void Swap( ElementType *a, ElementType *b ){ ElementType t = *a; *a = *b; *b = t; } void BubbleSort(ElementType A[], int N){ int P,i; int flag; for(P=N-1;P>=0;P--){ flag=0; for(i=0...
  • 排序方法的比较

    千次阅读 2015-07-31 14:08:51
    首先给出各个排序方式的性能比较: 排序方法的比较 类别 排序方法 时间复杂度 空间复杂度 稳定性 平均情况 最好情况 最坏情况 辅助存储 插入排序 直接插入 O(n2) O(n) O(n2...
  • 一、直接插入排序。 1、介绍。 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录...假设在排序过程中,前3个记录已按关键码值递增的次序重新排列,构成一个有序序列:49,60,71。将待排序记录中...
  • 排序和归并排序

    千次阅读 2017-08-15 11:05:57
    一、堆排序 1.1 简介 堆排序与快速排序,归并排序一样都是时间复杂度为O(n*logn)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的堆。 堆的定义:n个元素的序列{k1,k2,…,kn}当且仅当满足下列...
  • linux 如何显示一个文件的某几行(中间几行) 【一】从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n +3000 | head -n 1000 【二】显示1000行到3000行 cat filename| head -n 3000 | tail ...
  • 数据结构之顺序文件

    千次阅读 2022-04-20 15:49:23
    顺序文件(Sequential File)是记录按其在文件中的逻辑顺序依次进入存储介质而建立的,即顺序文件中物理记录的顺序和逻辑记录的顺序是一致的。若次序相继的两个物理记录存储介质上的存储位置是相邻的,则又称连续文件;...
  • C++实现十大排序算法

    千次阅读 多人点赞 2019-12-03 22:45:16
    具体代码与文件可访问我的GitHub地址获取 https://github.com/liuzuoping/Algorithms PS:欢迎star 1 冒泡排序 冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也...
  • 归并类的排序算法 ...归并排序是建立归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 图解如下 看成是 n 个有序的子序列(长度为 1),然后
  • 数据结构排序算法综合运用及比较(C语言实现)

    千次阅读 多人点赞 2020-04-29 20:30:09
    (1)熟练掌握几种经典排序的算法(如冒泡排序、选择排序、插入排序、希尔排序、折半插入排序、快速排序、归并排序、堆排序等)。培养综合运用所学知识,根据具体问题进行数据结构设计和算法设计的能力。 (2)熟练...
  • 九种常用排序算法

    千次阅读 2018-12-01 21:25:55
    目录 排序分类: 排序算法优劣指标: ...1、插入排序:直接插入排序(InsertSort),二分插入排序,希尔排序(希尔排序) 2,选择排序:简单选择排序,堆排序 3,交换排序:冒泡排序,快速排序...
  • 1、冒泡排序1.1、简介与原理冒泡排序算法运行起来非常慢,但概念上它是排序算法中最简单的,因此冒泡排序算法刚开始研究排序技术时是一个非常好的算法。冒泡排序原理即:从数组下标为0的位置开始,比较下标位置...
  • 1:main函数list集合中的文件名称是按照修改的时间最近的排列最前面 package cn.streamax.Auto.Utils; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util....
  • 大小等 Cd:用于切换到目标目录 Mkdir:用于简历当前目录的子目录 rm-r 删除的文件或者目录,需确认 rm –rf同上但无需确认 cp:复制文件 若复制目录则必须加上-r 数据库MySQL 一.索引 1.B树,B+树,以及两者的区别 B...
  • excel两列同时排序的方法腾讯视频/爱奇艺/优酷/外卖 充值4折起我们使用Excel对数列排序时,有时会碰到需要对两列数据同时排序,下面就跟大家详细介绍操作方法。1、首先,我们打开Excel输入测试数据,至少两列以上...
  • 对sam/bam文件进行操作

    千次阅读 2020-07-27 16:56:04
    对sam/bam文件进行操作 1、view -b:输出bam格式,用于后续分析 -h:默认输出sam文件不带表头,该参数设定后输出带表头信息 sam文件转换为bam文件 samtools view -bS -1 test.sam > test.bam 1 view 从bam/sam...
  • 希尔排序

    千次阅读 2019-05-25 09:55:01
    希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,291
精华内容 62,916
关键字:

如何让复制的文件排序在最后