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
现在是可选的)?也在