1

の形式で月ごとに区切られた複数のタブ区切りデータファイルがありますjan06.txt, feb06.txt, ..., dec07.txt

各ファイル内では、次のようになります。

Header1 Header2 Header3 ...
Data1   Data2   Data3   ...
Data4   Data5   Data6   ...
...     ...     ...

私がやりたいのは、すべてのデータファイルを1つのデータファイルに結合し、上部に1つのヘッダーだけを含めるだけでなく、月と年を含む新しいデータ列を含めることです。ファイル名。したがって、私の新しい単一のデータファイルには次のものが含まれます。

Date   Header1 Header2 Header3 ...
200601 Data1   Data2   Data3   ...
200602 Data4   Data5   Data6   ...
...    ...     ...     ...

200601が2006年1月6日を指す場合、200602は2月6日などを指します。

のようなことをすればcat *.txt > data.txt、すべてのファイルを組み合わせることができます。ただし、2つの問題が残っています。

  1. 連結されるすべてのファイルにヘッダーがありますが、これは望ましくありません。
  2. ファイル名に保存されている月の情報が失われてしまいます。

catとの組み合わせでこれができると思いますがsed、どうやって始めたらいいのかわかりません。

4

2 に答える 2

1

例えば:

 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

于 2013-02-02T01:41:24.753 に答える
1

次のことを試してください。

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
于 2013-02-02T01:41:33.870 に答える