我需要帮助才能根据两个文件的数据创建第三个文件。其中两个文件具有相同数量的记录,每个文件中的数据彼此对应。
Fields.txt的数据如下
Field1
DEST_1
TEMPS
FLAGS
Datatype.txt包含以下数据
INTEGER
CHAR
DATE
DATE
我需要帮助任何将检查datatype.txt文件中的数据类型的脚本,如果它与DATE匹配,将使用fields.txt创建第3个文件,并且应该格式化相应的字段。我期待第三个文件中的数据如下
Field1
DEST_1
CHAR(TEMPS)
CHAR(FLAGS)
上面是一个示例,源文件中可能有更多数据,任何帮助都将受到赞赏。
答案 0 :(得分:1)
使用awk
:
$ awk '
NR==FNR { type[NR] = $0; next }
{ print (type[FNR]=="DATE" ? "CHAR(" $0 ")" : $0) }
' datatype.txt fields.txt
Field1
DEST_1
CHAR(TEMPS)
CHAR(FLAGS)
读取以行号索引的内存中的文件datatype.txt
。在阅读fields.txt
文件时,检查数组值是否为DATE
。如果是用您想要的输出替换线。
这需要将文件datatype.txt
保留在内存中。如果文件太大,则有另一种方法可以并行读取这两个文件。
$ awk '
(getline type < "datatype.txt") > 0 {
print (type=="DATE" ? "CHAR(" $0 ")" : $0)
}' fields.txt
Field1
DEST_1
CHAR(TEMPS)
CHAR(FLAGS)
此解决方案需要使用getline
。投资前请仔细阅读offer document。
以下是使用paste
和awk
建议的另一种方式,如Ed Morton所示。
$ paste datatype.txt fields.txt | awk '{ print ($1=="DATE" ? "CHAR(" $2 ")" : $2)}'
Field1
DEST_1
CHAR(TEMPS)
CHAR(FLAGS)
答案 1 :(得分:0)
答案 2 :(得分:0)
并行读取文件:
use strict;
use warnings;
use autodie;
#open my $fh1, '<', 'Fields.txt';
open my $fh1, '<', \ "Field1\nDEST_1\nTEMPS\nFLAGS\n";
#open my $fh2, '<', 'Datatype.txt';
open my $fh2, '<', \ "INTEGER\nCHAR\nDATE\nDATE\n";
while (!eof($fh1) && !eof($fh2)) {
chomp(my $line1 = <$fh1>);
chomp(my $line2 = <$fh2>);
print $line2 eq 'DATE' ? "CHAR($line1)\n" : "$line1\n";
}
输出:
Field1
DEST_1
CHAR(TEMPS)
CHAR(FLAGS)