2017-06-18 43 views
1

我是一个shell脚本初学者。我一直在试图解决这个问题已经有一段时间了,我仍然不知道,我应该如何编写这个shell脚本以便它能够工作。我有多个包含数据的文本文件。我需要的是编写一个脚本,它将创建一个包含文件中数据的编号列表。例如:我有四个文件,“file_A”,“file_B”,“file_C”和“file_D”。他们每个人都有一些文字。基本上,我需要把它转移到使用类似“script.sh OUTPUT_FILE FILE_A FILE_B FILE_C FILE_D”一个新的文件,从而使输出文件看起来像这样: 用于创建文件编号列表的shell脚本

  • FILE_B“

    1. FILE_A“从FILE_A文本”从FILE_B从FILE_C从FILE_D “
    2. FILE_D ”文本“

    好吧,现在我知道我也可以把回声 ”$ _文件#“ 和猫 ”$ _文件#“ 到”

  • FILE_C” 文本文本>>“$ output_file”,但我如何使它工作repea使用参数进行大量的输入文件我想我需要使用for循环,对吧?我如何添加编号?我应该为这个行计数功能设置一个变量吗?

    感谢您的任何帮助。

  • +0

    您到目前为止尝试过什么? –

    +0

    没有什么,工作。说实话,我完全不知道。我的意思是,我甚至不知道如何使用“for FILE; do ...”,这样它就不包含第一个参数。我知道可能需要使用哪些命令来构建脚本,但我不知道如何使用这些脚本。我可以看到for,do,done的用法;猫;回声; >>;也许是移位,然后进行一些算术扩展,但这就是它... – JKos

    回答

    0

    其中一种方法:

    #!/bin/bash 
    
    # first argument is output file 
    output_file=$1 
    shift 
    
    # shift through rest of the arguments 
    while [ $# -ne 0 ] 
    do 
        echo "$((counter+=1)). $1 '$(cat $1)'" >> $output_file 
        shift 
    done 
    
    +1

    非常感谢!这很好。感谢您的脚本和解释。我很高兴我得到了两个不同的答案,这帮助我更好地理解问题。 :) – JKos

    0

    你可以试试下面的解决方案,它为我工作

    #!/bin/bash 
        #index to refer file number 
        index=0 
        #var to store output file name 
        outputFile="$1" 
        #clear output file before writing 
        echo "" > $outputFile 
        #iterate through all args 
        for file in "[email protected]" 
        do 
          if [ $index -eq 0 ] #skip first arg as it contain output file 
          then 
            index=$((index+1)) 
            continue 
          fi 
          echo "$index. $file " `cat $file` >> $outputFile #append file index, name & text to output file 
          index=$((index+1)) 
        done 
    

    输出:

    1. 文件1随机TXT 1

    2. 文件2随机TXT 2

    +1

    非常感谢!这很好。感谢您的脚本和解释。我很高兴我得到了两个不同的答案,这帮助我更好地理解问题。 :) – JKos