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_Scripting - Fatal编程技术网

Bash 如何将文本文件中的行数附加到文件的开头?

Bash 如何将文本文件中的行数附加到文件的开头?,bash,shell,scripting,Bash,Shell,Scripting,我在一个文件夹中有数百个文本文件。我正在寻找一种方法,将文本文件中的行数附加到相应文本文件的开头?您知道如何使用Bash快速处理文件夹中的所有文件吗?您可以使用此处提供的解决方案-它适用于一个文件,但您可以将其放入循环中以获得所需的文件列表 或者,您可以编写一个程序来完成该任务 我建议您将结果输出到一个单独的文件夹中,如果出现错误,首先不要覆盖原始文件,还可以测试空文件或您无权访问的文件的方法。您可以使用此处提供的解决方案-它适用于一个文件,但您可以将其放入循环中,以获得所需的文件列表 或者

我在一个文件夹中有数百个文本文件。我正在寻找一种方法,将文本文件中的行数附加到相应文本文件的开头?您知道如何使用Bash快速处理文件夹中的所有文件吗?

您可以使用此处提供的解决方案-它适用于一个文件,但您可以将其放入循环中以获得所需的文件列表

或者,您可以编写一个程序来完成该任务


我建议您将结果输出到一个单独的文件夹中,如果出现错误,首先不要覆盖原始文件,还可以测试空文件或您无权访问的文件的方法。

您可以使用此处提供的解决方案-它适用于一个文件,但您可以将其放入循环中,以获得所需的文件列表

或者,您可以编写一个程序来完成该任务


我建议您将结果输出到一个单独的文件夹中,并且在出现错误时不要首先覆盖原始文件,还应测试空文件或您无权访问的文件的方法。

以下内容将通过适当的grep替换来确保您使用正确的文件

for i in $(ls |grep ".txt") ; do c=$(wc -l < $i) ; sed -i '1s/^/$c\n /' $i ; done
以美元表示的i的
(ls | grep.txt);do c=$(wc-l<$i);sed-i'1s/^/$c\n/'$i;完成

/$c\n/是附加的内容,因此您可以执行/LINECOUNT:$c\n/,但保留\n以便前一行不会附加到第二行,而是移动到第二行

以下内容将通过对grep的适当替换来确保您处理正确的文件

for i in $(ls |grep ".txt") ; do c=$(wc -l < $i) ; sed -i '1s/^/$c\n /' $i ; done
以美元表示的i的
(ls | grep.txt);do c=$(wc-l<$i);sed-i'1s/^/$c\n/'$i;完成
/$c\n/是附加的内容,因此您可以执行/LINECOUNT:$c\n/,但保留\n以便前一行不会附加到第二行,而是移动到第二行

那么:

for file in *.txt; do
    tmp=$(mktemp -dt "${file}")
    < ${file} wc -l | cat - ${file} > ${tmp}
    mv ${tmp} ${file}
done
因此,在循环中进行:

for file in *.txt; do

    sed -i -e "1s/^/$(wc -l ${file} | awk '{print $1}')\\
/" ${file}

done
那么:

for file in *.txt; do
    tmp=$(mktemp -dt "${file}")
    < ${file} wc -l | cat - ${file} > ${tmp}
    mv ${tmp} ${file}
done
因此,在循环中进行:

for file in *.txt; do

    sed -i -e "1s/^/$(wc -l ${file} | awk '{print $1}')\\
/" ${file}

done

在我的回答中,我不想创建一个新文件,即使是临时文件,但您的并行示例非常好。@MattGreen:您可能想在问题中提到这一点。一秒钟内更新。!你可以写
@GarethRees:犯了更糟的罪。但是为了确保它对SO有好处,我不想在我的回答中创建一个新文件,即使是临时文件,但你的并行示例非常好。@MattGreen:你可能想在问题中提到这一点。一秒钟内更新。!你可以写
@GarethRees:犯了更糟的罪。但是修复了以确保它适合这样做。为什么您认为您需要在文件开始时进行行计数?行计数是否包括带计数的行,或者是行计数后的行数?一般来说,你的目标应该是一直读到EOF,而不是把预先确定的行数搞乱。如果在添加行计数后修改文件(通过(部分)截断或扩展),您的代码将做什么?行计数应包含行计数后的行数。我正在使用它为行计数后的特征向量预分配内存。我怀疑您想要行计数,因此您知道文件其余部分中有多少数据。数据前的行数对于不知道动态内存分配的新手程序员来说很有用,因为它可以避免一些问题,但我建议您学习如何增量地进行动态内存分配,并在执行过程中添加到您的结构中。提示:不这样做的方法是使用
realloc()
在每一行上增加一个大小。对于数组,每次需要更多内存时,您通常会分配两倍的条目。为什么您认为需要在文件开头进行行计数?行计数是否包括带计数的行,或者是行计数后的行数?一般来说,你的目标应该是一直读到EOF,而不是把预先确定的行数搞乱。如果在添加行计数后修改文件(通过(部分)截断或扩展),您的代码将做什么?行计数应包含行计数后的行数。我正在使用它为行计数后的特征向量预分配内存。我怀疑您想要行计数,因此您知道文件其余部分中有多少数据。数据前的行数对于不知道动态内存分配的新手程序员来说很有用,因为它可以避免一些问题,但我建议您学习如何增量地进行动态内存分配,并在执行过程中添加到您的结构中。提示:不这样做的方法是使用
realloc()
在每一行上增加一个大小。对于阵列,每次需要更多内存时,通常会分配两倍的条目。