根据每行的前导字符从文本文件中提取行

时间:2014-03-13 14:20:39

标签: bash batch-file

我需要操作一个非常大的数据转储。基本上,我收到一个文本文件,其中包含来自多个表的数据。每行的前两个字符将告诉我这是什么表。我需要读取这些行中的每一行,然后将它们提取到TEXT文件中......它会将每行附加到文本文件中。每个表都应该有自己的文本文件。

例如,假设数据文件看起来像这样......

HDxxxxxxxxxxxxx
HDyyyyyyyyyyyyy
ENxxxxxxxxxxxxx
ENyyyyyyyyyyyyy
HSyyyyyyyyyyyyy

我需要的是名为HD_out.txt的文本文件中的前两行,名为EN_out.txt的文本文件中的第3行和第4行,以及名为HS_out.txt的文件中的最后一行。

有谁知道如何使用简单的批处理文件或UNIX shell脚本来完成这项工作?

2 个答案:

答案 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