我有多个制表符分隔的数据文件,按月以[{1}}格式分隔。
在每个文件中,它看起来像:
jan06.txt, feb06.txt, ..., dec07.txt
我想要做的是将所有数据文件合并到一个数据文件中,顶部只有一个标题,但也包含一个包含月份和年份的新数据列,所以我不会丢失来自文件名的信息。所以我的新单个数据文件将包含:
Header1 Header2 Header3 ...
Data1 Data2 Data3 ...
Data4 Data5 Data6 ...
... ... ...
200601指的是06年1月6日,200602指的是2月06日等。
我知道如果我执行Date Header1 Header2 Header3 ...
200601 Data1 Data2 Data3 ...
200602 Data4 Data5 Data6 ...
... ... ... ...
之类的操作,我可以合并所有文件。但是,这两个问题仍然存在:
我认为我可以使用cat *.txt > data.txt
和cat
的某种组合执行此操作,但我不确定如何开始。
答案 0 :(得分: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
等
答案 1 :(得分: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