我需要操作一个非常大的数据转储。基本上,我收到一个文本文件,其中包含来自多个表的数据。每行的前两个字符将告诉我这是什么表。我需要读取这些行中的每一行,然后将它们提取到TEXT文件中......它会将每行附加到文本文件中。每个表都应该有自己的文本文件。
例如,假设数据文件看起来像这样......
HDxxxxxxxxxxxxx
HDyyyyyyyyyyyyy
ENxxxxxxxxxxxxx
ENyyyyyyyyyyyyy
HSyyyyyyyyyyyyy
我需要的是名为HD_out.txt的文本文件中的前两行,名为EN_out.txt的文本文件中的第3行和第4行,以及名为HS_out.txt的文件中的最后一行。
有谁知道如何使用简单的批处理文件或UNIX shell脚本来完成这项工作?
答案 0 :(得分:0)
使用awk
根据前2个字符分割文件:
gawk -v FIELDWIDTHS='2 99999' '{print $2 > $1"_out.txt"}' input.txt
答案 1 :(得分:0)
使用bash
:
while read -r line; do
echo "${line:2}" >> "${line:0:2}_out.txt"
done < inputFile
${var:startposition:length}
是一个bash
字符串函数,用于捕获子字符串。这将导致您的输入文件基于前两个字符进行拆分。如果您想要包含表格前缀,只需使用echo "$line" >> "${line:0:2}_out.txt"
而不是上面显示的内容。
<强>演示:强>
$ ls
file
$ cat file
HDxxxxxxxxxxxxx
HDyyyyyyyyyyyyy
ENxxxxxxxxxxxxx
ENyyyyyyyyyyyyy
HSyyyyyyyyyyyyy
$ while read -r line; do echo "${line:2}" >> "${line:0:2}_out.txt"; done < file
$ ls
EN_out.txt file HD_out.txt HS_out.txt
$ head *.txt
==> EN_out.txt <==
xxxxxxxxxxxxx
yyyyyyyyyyyyy
==> HD_out.txt <==
xxxxxxxxxxxxx
yyyyyyyyyyyyy
==> HS_out.txt <==
yyyyyyyyyyyyy