入力ファイルデータ
Name: aa
Age: 20
Address: zzzz
Name: bb
Age: 17
Address: cccc
このように出力したい
aa,20,zzzz
bb,17,cccc
答え1
$ cat ip.txt
Name: aa
Age: 20
Address: zzzz
Name: bb
Age: 17
Address: cccc
$ awk 'NF{print $2}' ip.txt | pr -3ats,
aa,20,zzzz
bb,17,cccc
awk
2番目の列の値のみを印刷して確認して、空の行をスキップするために使用されます。NF
- 次に、次を使用して
pr
3つの,
列に
答え2
perl -00nE 'say join(",", /:\s*(.*)/g)' ip.txt
どこ:
perl -00nE EXP
- 代表: foreach 段落 do {EXP}/:(.*)/g
- 一致するグループのリストを返します。join(",", list)
- 別の要素,
\ありがとう{Sundeep}
答え3
Perlを使った例ファイル内の各行を繰り返し、目的のデータを配列としてキャプチャしてから、配列要素をコンマで連結して印刷します。
use warnings;
use strict;
my $file = 'file.txt';
open my $fh, '<', $file or die $!;
while (my $line = <$fh>){
my @sections = $line =~ /:\s(.*?)\s/g;
print join ',', @sections;
print "\n";
}
出力:
aa,20,zzzz
bb,17,cccc