shell 打乱文件行

思路,产生一个随机数组,然后按按照数组的元素将文件中行的重新输出
1、随机数组的生成
    看书的时候感觉很是简单。第一次用却有点无从下手。
    首先是定义,shell中的变量是弱变量,可以随时定义。
        arr=(`seq 57`)
        创建一个1..57的一个数组,注意一定要加括号,否则定义不成数组。
        也可以使用for循环的方式为数组动态赋值。
        for ((i=0;i<57;i++)) #有空格
        do
            arr[$i]=$(($i+1))
        done
    再次是产生随机数
        使用内部变量$RANDOM,产生的是0-32767。
    #!/bin/bash
    arr=(`seq 57`)
    let "a=$RANDOM%57"
    let "b=$RANDOM%57"
    echo "a="$a
    echo "b="$b
    tmp=${arr[$a]}
    arr[$a]=${arr[$b]} #赋值的时候arr[$a],不要写成${arr[$a]}
    arr[$b]=$tmp
    echo ${arr[@]}
    将上面的过程循环10000次
    44 13 48 53 22 15 35 28 1 31 8 49 4 34 6 55 20 32 26 40 18 37 16 43
    9 27 25 42 2 3 50 11 56 46 24 41 7 12 54 30 45 47 17 23 33 10 51 19
    52 38 57 14 29 36 39 5 21
2、打乱文件行
    #!/bin/bash
    arr=(`seq 57`)
    for ((i=0;i<10000;i++))
    do
            let "a=$RANDOM%57"
            let "b=$RANDOM%57"
            tmp=${arr[$a]}
            arr[$a]=${arr[$b]}
            arr[$b]=$tmp
    done
    #echo ${arr[@]}
    for i in ${arr[@]}
    do
            j=0
            while read line #注意读取文件的写法
            do
                    ((j++))
                    if [ "$i" -eq "$j" ];then
                            echo "i=$i,j=$j:$line"
                            echo $line >> list1.txt
                            break
                    fi
            done < backup.txt
    done
   通过上述的脚本,感觉即使把书看完了,知道了一些东西,还是不行,重要的是不停的练习。即使是很简单的东西,如数组,if判断等,不写用的时候只能是眼高手低,无从落笔。
时间: 2025-01-04 02:04:19

shell 打乱文件行的相关文章

shell读取文件行,列

cat ${FILE} | while read line do echo $line done ------------------------------------------- while read LINE  #每次读取aa.list中的一行 do echo $LINE     #输出每行的信息 done < ${FILE} ------------------------------------------- 读取文件的每行第一列和第二列 while read n m do echo

C++/Php/Python/Shell 程序按行读取文件或者控制台

写程序经常需要用到从文件或者标准输入中按行读取信息,这里汇总一下.方便使用 1. C++ 读取文件 1 #include<stdio.h> 2 #include<string.h> 3 4 int main(){ 5 const char* in_file = "input_file_name"; 6 const char* out_file = "output_file_name"; 7 8 FILE *p_in = fopen(in_fi

Shell遍历文件,对每行进行正则匹配

Shell查看文件的最后5行,并对每行进行正则匹配,代码如下: #!/bin/sh pattern="HeartBeat" tail -n 5 /home/test/log/log_20150205.log | while read line do if [[ $line =~ $pattern ]] then echo "Match" else echo "No match" fi echo $line done

linux shell 逐行读取文件行

读取文件行 for 命令替换 代码块重定向 while 管道符 代码块重定向 for IFS=$'\n' for line in `ls -l` do (( count++ )) done echo $count 注意: for读取时,自动按空格作为间隔符.因此需要将IFS定义为按换行符分隔 ls -l > forout.log maxlength=$(wc -l < forout.log) for i in `seq $maxlength` do (( count++ )) done <

linux环境: shell初始化文件, for TCSH, CSH

TCSHELL, CSHELL 配置文件 全局配置文件 /etc/csh.cshrc个人配置文件 ~/.cshrc或~/.tcshrc 参考: 1.配置你的csh/tcsh,  https://wiki.freebsdchina.org/howto/c/config_your_csh 2.我的.cshrc常用设置 http://biancheng.dnbcw.info/bsd/260256.html 我使用csh,喜欢在.cshrc 中添加如下的内容:#给ls增加眼色,给目录名后面加上 '/'a

shell解析命令行的过程以及eval命令

本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e "some files:" ~/i* "\nThe date:$(date +%F)\n$name's age is $((a+4))" >/tmp/a.log 假设在执行该命令前,已赋值变量"name=longshuai"和"a=

Linux - wc统计文件行数、单词数或字节数

一 wc简介 wc命令用来打印文件的文本行数.单词数.字节数等(print the number of newlines, words, and bytes in files).在Windows的Word中有个"字数统计"的工具,可以帮我们把选中范围的字数.字符数统计出来.Linux下的wc命令可以实现这个 功能.使用vi打开文件的时候,底下的信息也会显示行数和字节数. 二 常用参数 格式:wc -l <file> 打印指定文件的文本行数.(l=小写L) 以下参数可组合使用

shell 判断文件、目录是否存在

shell判断文件是否存在 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. myFile="/var /log/httpd/access.log" 6. 7. # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 8. if [ ! -x "$myPath"]; then 9. mkdir "$myPath" 10

shell判断文件是否存在

转自:http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html 1. shell判断文件,目录是否存在或者具有权限 2. #!/bin/sh 3. 4. myPath="/var/log/httpd/" 5. myFile="/var /log/httpd/access.log" 6. 7. # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 8. if [ ! -x "