Perl 提取和匹配文本文件中的列
我有一个具有以下结构的文本文件。我想删除逗号前的第一部分,保留其余部分,然后将它们与第二列匹配,并将它们放在单独的行中 输入:Perl 提取和匹配文本文件中的列,perl,awk,cut,Perl,Awk,Cut,我有一个具有以下结构的文本文件。我想删除逗号前的第一部分,保留其余部分,然后将它们与第二列匹配,并将它们放在单独的行中 输入: A,B,C London G,L,K,I Berlin Q,O,M,J Madrid 我想要这样的输出: 输出: B London C London L Berlin K Berlin I Berlin O Madrid M Madrid J Madrid 这可能是awk的一种方式: $ awk '{n=split($1,
A,B,C London
G,L,K,I Berlin
Q,O,M,J Madrid
我想要这样的输出:
输出:
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
这可能是awk的一种方式:
$ awk '{n=split($1, a, ","); for (i=2; i<=n; i++) print a[i], $NF}' file
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
$awk'{n=split($1,a,“,”);for(i=2;i这可能是awk的一种方式:
$ awk '{n=split($1, a, ","); for (i=2; i<=n; i++) print a[i], $NF}' file
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
$awk'{n=split($1,a,“,”);for(i=2;i,因为您有perl
标记:
perl -alne '$F[0]=~s/^.*?,//g; @a=split /,/,$F[0]; map { print "$_ $F[1]" } @a' file
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
说明:
-a
将字段拆分为数组@F
-l
在每次打印语句后打印\n
-n
循环文件
$F[0]=~s/^.*?,//g;
在请求字符串之间删除任何内容
和,
用于数组@F的位置0
@a=split/,/,$F[0];
创建数组@a
map{print“$\u$F[1]”}@a
也可以写成foreach(@a){print“$\u$F[1]”}
使用shift
的较短版本:
perl -alne '@a=split /,/,$F[0]; shift @a; print "$_ $F[1]" for @a' file
由于您有perl
标记:
perl -alne '$F[0]=~s/^.*?,//g; @a=split /,/,$F[0]; map { print "$_ $F[1]" } @a' file
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
说明:
-a
将字段拆分为数组@F
-l
在每次打印语句后打印\n
-n
循环文件
$F[0]=~s/^.*?,//g;
在请求字符串之间删除任何内容
和,
用于数组@F的位置0
@a=split/,/,$F[0];
创建数组@a
map{print“$\u$F[1]”}@a
也可以写成foreach(@a){print“$\u$F[1]”}
使用shift
的较短版本:
perl -alne '@a=split /,/,$F[0]; shift @a; print "$_ $F[1]" for @a' file
Perl方法
perl -aF[\\s,]+ -nE'say "$_ $F[-1]" for @F[1..$#F-1]' myfile
输出
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
Perl方法
perl -aF[\\s,]+ -nE'say "$_ $F[-1]" for @F[1..$#F-1]' myfile
输出
B London
C London
L Berlin
K Berlin
I Berlin
O Madrid
M Madrid
J Madrid
谢谢。它成功了。你能给我推荐一个在线页面,让我可以学习更多关于Awk和Sed的知识吗?@palc读起来很高兴。我有点喜欢这个关于习惯性Awk的页面:首先,阅读Sed
也很好。我没有任何特别的建议,也许人Sed
和谷歌一点其他东西。最后,尝试这样做我的问题很有帮助!谢谢。它成功了。你能给我推荐一个在线页面,让我可以了解更多关于Awk和Sed的信息吗?@palc读起来很高兴。我有点喜欢这个关于习惯性Awk的页面:首先,阅读Sed
也很好。我没有任何特别的建议,也许man-Sed
和谷歌最后,尝试在中解决问题会有很大帮助。map{print“$\$F[1]”a
对于@a
@Borodin来说写为print“$\$F[1]”要好得多。map{print”$\$F[1]”a
写为print“$\$F[1]”对于@a
@Borodin,谢谢你,因为我不知道这是可能的。-F[\s,]+
不起作用。perl-aF',\s+'-nE'$v=pop@F;shift@F;对@F'文件说“$\u$v”,我不知道为什么。@Tiago:-a
意味着-n
+
@fedorqui:对不起,我明白了。修正了。很抱歉打扰你,但你知道为什么会这样吗:paste.ubuntu.com/7826816。-aF'[\s,]+'
(引用)“Tiago:我当时使用的是一台Windows机器,它要求它的参数以不同的方式引用。我手动将它转换为Linux风格,但无法测试它。-F[\s,]+
不起作用。perl-aF',|\s+'-nE'$v=pop@F;shift@F;说“$\u$v”因为@F'文件能起作用,我不知道为什么。@Tiago:-a
意味着-n
。你应该使用-aF[\s,]+
,而不是-F[\s,]+
@fedorqui:对不起,我明白了。修复了。很抱歉打扰你,但为什么会发生这种情况:paste.ubuntu.com/7826816。-aF'[\s,]+
(引用)@Tiago:我当时使用的是一台Windows机器,它要求它的参数以不同的方式引用。我手动将它转换为Linux风格,但无法测试它。