从管道

时间:2016-06-27 16:14:40

标签: perl awk

我有一个PC列表,我需要为每个PC添加引号和逗号,以便我可以进行SQL查询

列出示例

Row1|PCName|PC1.local
Row2|PCName|PC2.local
Row3|PCName|PC3.local

我需要得到这个

"PC1.local", "PC2.local", "PC3.local", ......

这是我试过的

cat list.txt | awk -F\| '{print $NF}' | perl -e 'while(<>){ print "\"$_\", ";}'

我明白了

", "PC1.local
", "PC2.local
", "PC3.local
", "

如何让这些个人电脑出现在我们需要的格式中?

我知道使用awk或perl可能对此有些过分,可以单独使用Perl或仅使用awk来完成,但我有兴趣学习如何将内容传递给Perl。如何让Perl以我需要的格式打印这些PC名称?

5 个答案:

答案 0 :(得分:1)

怎么样:

#!/usr/bin/env perl
use strict;
use warnings;

print join ",", map { chomp; '"'.(split /\|/)[2].'"' } <DATA> ;

__DATA__
Row1|PCName|PC1.local
Row2|PCName|PC2.local
Row3|PCName|PC3.local

输出:

"PC1.local","PC2.local","PC3.local"

作为一个班轮:

perl -e 'print join ",", map { s/\n//; q{"}.(split /\|/)[2].q{"} } <>'

答案 1 :(得分:1)

$ awk -F'|' '{printf "%s\"%s\"", (NR>1?", ":""), $3} END{print ""}' file
"PC1.local", "PC2.local", "PC3.local"

答案 2 :(得分:0)

使用unix工具集

$ cut -d'|' -f3 file | sed 's/.*/"&"/' | paste -s -d,

提取第三个字段,用引号括起来,用逗号连接

答案 3 :(得分:0)

这是一个Perl单行解决方案

$ perl -le 'print join ", ", map { /([^|\s]+)$/ && qq{"$1"} } <>' myfile

输出

"PC1.local", "PC2.local", "PC3.local"

答案 4 :(得分:-1)

#!perl 

use strict;
use warnings; 

while ( my $line = readline(*STDIN) ) {
   chomp $line;
   my @machines = split /\|/, $line;
   print join(',', map { '"' . $_ . '"' } @machines), "\n";
}

输出:

$ cat list.txt | perl test.pl 
"Row1","PCName","PC1.local"
"Row2","PCName","PC2.local"
"Row3","PCName","PC3.local"