我有一个2000行的文件。我使用以下内容每100行拆分文件。
split -l 100 file.txt outputfile.txt
我想在每个文件内容的末尾添加一个“FFFFFF”,在分割后我还要指定文件使用的扩展名,如上面的命令输出如下。
outputfile.txtxa, outputfile.txtxb etc...
我已经阅读了拆分的手册页并浏览了网页,但我找不到解决方案。
任何建议都表示赞赏。
答案 0 :(得分:2)
对于一次性解决方案,您可以使用awk
,如下所示:
awk 'NR%100==1 { ++i } { print $0 (NR%100==0 ? "\nFFFFFF" : "") > "outputfile" i ".txt" }' file.txt
此外,这里的优点是更好地控制输出文件名,使它们更漂亮。如果您需要更精美的东西,请告诉我。欢呼声。
user1937的说明:
如果您熟悉modulo operator,NR%100==1
将返回第1行,第101行,第201行,第301行等的true。每次都是真的,变量{{ 1}}递增。注意i
语句是如何由条件/操作块组成的。因此awk
是条件,NR%100==1
是行动。你会注意到(希望是)具有打印动作的块缺少条件。因此,每一行输入都是打印的(所有时间)。 ++i
的值只是确定输出要打印到哪个文件。
您可能不熟悉的另一点是:i
。这是一个
ternary operator,是(NR%100==0 ? "\nFFFFFF" : "")
的简写。 HTH。
if (NR%100==0) print "\nFFFFFF"; else print "")
代码:
awk
如您所见,pattern1仅适用于action1。 pattern1 不适用于action2。
答案 1 :(得分:1)
单独拆分你不能做到这一点。此代码可能有所帮助:
split -l 100 file.txt outputfile_
find . -name outputfile_\* -exec sh -c 'echo "FFFFFF" >> {} && mv {} {}.txt' \;
这将导致文件outputfile_aa.txt
,outputfileab.txt
等,这些文件将以FFFFFF
结尾。
这样做如下:首先我们将前缀为outputfile_
的文件拆分为生成文件outputfile_aa
,outputfile_ab
等。然后我们调用find
命令将它们全部收集起来用它来执行命令。有一个小问题,您无法在find命令中使用重定向,因此我们将重定向包装到shell脚本中并使用sh
执行整个操作。 {}
将替换为每个单独的文件名(在-exec
的手册页中查找find
);因此,脚本首先将FFFFFF
字符串附加到文件末尾,然后重命名该文件以添加txt
扩展名。