例如输入文件是
ID Name Dept_id
1 aaa 1
2 ddd 1
3 sss 2
它是制表符分隔文件
输出将像
ID Name Dept_id
1 aaa 1.1
2 ddd 2.1
3 sss 3.2
任何人都可以帮助我吗?
答案 0 :(得分:3)
while (<>) {
s/^(\d+)\s\S+\s\K(\d+)/$1.$2/;
} continue {
print;
}
在perl代码中,程序看起来像这样:
\d+
替换正则表达式查找以一个或多个数字\s
开头的行,并用括号捕获它们,然后是空格\S+
,非空格\K
,再次是空格,然后是数字,我们也捕获。 .
(保持)表示我们不希望更改左侧的任何内容。然后我们用第一个捕获的字符串替换它,句点curl -XPUT localhost:9200/_template/my_template -d '{
"template" : "logstash-*",
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"my_type" : {
"properties": {
...
}
}
}
}'
和第二个捕获的字符串。
答案 1 :(得分:2)
您想在ID
中添加dept_id
号码。因此,迭代文件的while循环。
然后使用chomp
删除换行符。
然后split
将每一行按空格或制表符分隔成数组,然后使用数组索引打印数组。
您的$ar[0]
拥有该ID。所以用$ar[0].$ar[2]
open my $handler, "<","file.txt";
my $first = <$handler>;
print "$first";
while (<$handler>)
{
chomp;
my @ar = split(/\s+/);
print "$ar[0]\t$ar[1]\t$ar[0].$ar[2]\n";
}
或者只是尝试一下
-n
循环输入文件。然后$.
告诉当前行号。
然后我在这里使用了模式匹配。
我创建了名为$on $tw $th
的临时列表。 $on
保存ID,$tw
保存名称,$th
保存Dept_id。然后它将通过打印"$on\t$tw\t$on.$th"
perl -ne 'if($. == 1){ print "$_"; next;} ($on,$tw,$th)= $_ =~m/(\w+)/g; print "$on\t$tw\t$on.$th\n";' file.txt