从当前目录中的文件创建自定义统计文件

从当前目录中的文件创建自定义统计文件

我有如下文件:

$ cat A9E27.txt
person,42%
person,60%
$ cat ffn2eG6.txt
train,85%
$ cat sBHFgkv.txt  
person,85%
person,73%
chair,44%
person,57%
$ cat A8eVAmK.txt

等等 我的一些 txt 文件实际上是空的。我怎样才能创建一个这样的文件

1,A9E27.txt,person,42%,person,60%
2,ffn2eG6.txt,train,85%
3,sBHFgkv.txt,person,85%,person,73%,chair,44%,person,57%
4,A8eVAmK.txt
5, etc etc 

其中 1 显示文件编号,当我按字母顺序对文件名进行排序时,例如 ls -1 | sort 和 A9E27.txt 是文件名,每行文件内容都位于其前面,以逗号分隔

更新:SchrodingersScat 在 Ubuntu IRC 上的回答在标准输出上几乎是正确的:

$ for i in * ; do echo -n "$i"; cat "$i" | sed ':a;$!{N;s/\n/, /;ba;}' ; done
5Co16.txtA9E27.txtperson,42%, person,60%
ffn2eG6.txttrain,85%
Kkc4e.txtsBHFgkv.txtperson,85%, person,73%, chair,44%, person,57%

给出了正确的答案,但是我如何才能正确地将标准输出上显示的结果保存到文件中?

答案1

kerframil来自bashIRC:

$  i=1; for f in *; do [[ -f $f ]] || continue; data=$(tr '\n' ',' < "$f"); printf '%s,%s,%s\n' "$((i++))" "$f" "${data%,}"; done > ../../in-your-file-correctly.txt

笔记:

/join #bash 

答案2

perl在 slurp 模式下使用怎么样?

$ perl -F'\n' -0777ne 'print join(",", ++$n, $ARGV, @F), "\n"' *.txt
1,A8eVAmK.txt
2,A9E27.txt,person,42%,person,60%
3,ffn2eG6.txt,train,85%
4,sBHFgkv.txt,person,85%,person,73%,chair,44%,person,57%

请注意,shell *.txtglob 会导致文件按照您所处语言环境的默认排序顺序进行处理 - 这可能不是您认为的“字母顺序”(尽管ls -1我认为它应该与 生成的顺序相同)。

要将结果保存到文件,请重定向它:

perl -F'\n' -0777ne 'print join(",", ++$n, $ARGV, @F), "\n"' *.txt > somefile

相关内容