1

假设我有文件 A.tsv、B.tsv 和 C.tsv。

cat -n A.tsv > A-id.tsv的是我想要一个文件的输出。如何制作一个简单的 bash 命令来处理所有 3 个文件,使行 ID 与前一个文件连续,并且我可以获得 3 个单独的文件,A-id.tsv、B-id.tsv 和 C-id .tsv?

例如,如果 A.tsv 有 3 行,则 B.tsv 将以 4 开头,输出格式类似于cat -n B.tsv.

4

2 回答 2

3

你为什么不cat A.tsv B.tsv C.tsv | cat -n > ABC.tsv呢?

通过特瓦尔伯格

或者更好的是, cat -n A.tsv B.tsv C.tsv > ABC.tsv

更新:

考虑到这不适用于您的 linux 发行版,这里有许多替代方案:

cat A.tsv B.tsv C.tsv | nl > ABC.tsv

cat A.tsv B.tsv C.tsv | grep -n '^' > ABC.tsv-- 该选项产生不同类型的格式,即: $linenumber: $line

于 2012-10-22T15:23:09.840 回答
1

这是一个 awk 替代方案:

awk '{outfile=FILENAME; sub(".tsv", "-id.tsv", outfile); printf("%6d %s\n", NR, $0) >outfile;}' A.tsv B.tsv C.tsv

更新、优化版本:

awk 'FNR==1 {outfile=FILENAME; sub(".tsv", "-id.tsv", outfile);} {printf("%6d %s\n", NR, $0) >outfile;}' A.tsv B.tsv C.tsv

于 2012-10-22T21:03:56.450 回答