在 Linux 中使用 dd 复制大文件并跳过第一行

在 Linux 中使用 dd 复制大文件并跳过第一行

我试图将一个大文件 (10GB) 的内容复制到另一个文件,跳过第一行 (如head -n1)。我尝试了 head、tail、awk 和 sed 等多种方法。最后决定使用tail -n+2 > ./xab.1

链接1 链接2 链接3。但处理过程需要很长时间。需要的时间比这还要多cp

我只想盲目地复制内容,仅此而已。所以我认为dd可以完成工作,但我对如何实施它感到茫然。有什么帮助吗?

好吧,为了提供更多背景信息,该文件是 CSV,所以我认为这样做 dd if=/dev/zero of=/path/to/file bs=1 seek=1 count=<<length(head -n1 /path/to/file)>> conv=notrunc应该可行。

但是如何让它工作呢?

编辑:所以,这就是我目前想到的,(是的,我知道我会丢失一些记录。但这并不重要)

#!/bin/bash
echo "Initiating xaa." `date`
head -n3 /stage/csv/dev/data/csv_huge/xaa > /stage/csv/dev/data/csv_huge/csv/header
tail -n3 /stage/csv/dev/data/csv_huge/xbc > /stage/csv/dev/data/csv_huge/csv/trailer
sed -i '$ d' /stage/csv/dev/data/csv_huge/xaa
cat /stage/csv/dev/data/csv_huge/csv/trailer >> /stage/csv/dev/data/csv_huge/xaa
mv /stage/csv/dev/data/csv_huge/xaa /stage/csv/dev/data/csv_huge/csv/xaa
echo "Completed xaa." `date`
sed -i 1d /stage/csv/dev/data/csv_huge/xab
sed -i '$ d' /stage/csv/dev/data/csv_huge/xab
cat /stage/csv/dev/data/csv_huge/csv/header /stage/csv/dev/data/csv_huge/xab > /stage/csv/dev/data/csv_huge/csv/xab
cat /stage/csv/dev/data/csv_huge/csv/trailer >> /stage/csv/dev/data/csv_huge/csv/xab
rm -f /stage/csv/dev/data/csv_huge/xab
echo "Completed xab." `date`
sed -i 1d /stage/csv/dev/data/csv_huge/xbc
cat /stage/csv/dev/data/csv_huge/csv/header /stage/csv/dev/data/csv_huge/xbc > /stage/csv/dev/data/csv_huge/csv/xbc
echo "Completed xbc." `date`

相关内容