Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 将多个数据文件与标题合并,同时添加数据列_Bash_Shell - Fatal编程技术网

Bash 将多个数据文件与标题合并,同时添加数据列

Bash 将多个数据文件与标题合并,同时添加数据列,bash,shell,Bash,Shell,我有多个以制表符分隔的数据文件,它们以月份分隔,格式为jan06.txt、feb06.txt、…、dec07.txt 在每个文件中,它看起来像: Header1 Header2 Header3 ... Data1 Data2 Data3 ... Data4 Data5 Data6 ... ... ... ... 我想做的是将所有数据文件合并到一个数据文件中,顶部只有一个标题,但还包括一个包含月份和年份的新数据列,这样我就不会丢失文件名中的信息。因此,我的

我有多个以制表符分隔的数据文件,它们以月份分隔,格式为
jan06.txt、feb06.txt、…、dec07.txt

在每个文件中,它看起来像:

Header1 Header2 Header3 ...
Data1   Data2   Data3   ...
Data4   Data5   Data6   ...
...     ...     ...
我想做的是将所有数据文件合并到一个数据文件中,顶部只有一个标题,但还包括一个包含月份和年份的新数据列,这样我就不会丢失文件名中的信息。因此,我的新的单个数据文件将包含:

Date   Header1 Header2 Header3 ...
200601 Data1   Data2   Data3   ...
200602 Data4   Data5   Data6   ...
...    ...     ...     ...
其中200601指的是2006年1月6日,200602指的是2006年2月,等等

我知道如果我做一些类似于
cat*.txt>data.txt
的事情,我可以合并所有文件。然而,这两个问题仍然存在:

  • 我在每个文件中都有一个连接的头,这是我不想要的
  • 我将丢失文件名中存储的月份信息
  • 我想我可以用
    cat
    sed
    的组合来实现这一点,但我不确定如何开始。

    例如:

     echo -e 'Date\tHeader1\tHeader2\tHeader3 ...' >out
     sed -n -e 's/^/200601\t/' -e '2,$p' <jan06.txt >>out
     sed -n -e 's/^/200602\t/' -e '2,$p' <feb06.txt >>out
    
    echo-e'Date\tHeader1\tHeader2\tHeader3…'>out
    sed-n-e's/^/200601\t/'-e'2,$p'>out
    sed-n-e's/^/200602\t/'-e'2,$p'>out
    
    等等。

    尝试以下方法:

    function month() {
    
        case ${1:0:3} in
            "jan") echo "20${1:3:2}01" ;;
            "feb") echo "20${1:3:2}02" ;;
            "mar") echo "20${1:3:2}03" ;;
            "apr") echo "20${1:3:2}04" ;;
            "may") echo "20${1:3:2}05" ;;
            "jun") echo "20${1:3:2}06" ;;
            "jul") echo "20${1:3:2}07" ;;
            "aug") echo "20${1:3:2}08" ;;
            "sep") echo "20${1:3:2}09" ;;
            "oct") echo "20${1:3:2}10" ;;
            "nov") echo "20${1:3:2}11" ;;
            "dec") echo "20${1:3:2}12" ;;
        esac
    
    }
    
    # Header
    directory="your_directory/"
    echo -en "Date\t" > data.txt
    head -1 $(ls "${directory}"/*.txt | head -1) >> data.txt
    
    # Contents
    for file in "${directory}"/*.txt; do
    
        date="${file##*/}"
        date="$(month ${date%*.txt})\t"
        tail -n +2 ${file} | sed 's/^/'${date}'/' >> data.txt
    
    done
    

    或者
    sed-n-e'2,$s/^/200601\t/p'
    (其中
    -e
    现在是可选的)?也在