我有一个CSV文件,其中包含以下格式的第一行。
aaa.bbb.ccc.ddd,eee.fff.ggg.hhh,iii.jjj.kkk.lll,mmm.nnn.ooo.ppp
.
和,
之间的字,即输出应如下所示。
ddd,hhh,lll,ppp
我想在shell脚本上完成此操作。
谢谢
Kiran Kumar G
答案 0 :(得分:0)
您可以使用此awk命令:
awk -F '[.,]' 'NR==1{s=$4; for(i=8; i<=NF; i+=4) s=s "," $i; print s}' file
ddd,hhh,lll,ppp
-F '[.,]'
会将输入字段分隔符设为,
或.
NR==1
将仅运行第一条记录。
答案 1 :(得分:0)
//= require jquery_ujs
//= require jquery
//= require turbolinks
//= require bootstrap
//= require_tree .
答案 2 :(得分:0)
您可以考虑使用Perl:
更改脚本中的文件名并使用以下命令运行:
$ ./<script name>.pl > newfile.csv
#!/usrbin/perl -w
$thefile = "yourfile.csv";
open(CSV_FILE, $thefile) or
die "\nError: cannot open file $thefile\n\n";
while ($line = <CSV_FILE>)
{
if ($. == 1)
{
chomp($line);
@comma_chunks = split(/,/,$line);
foreach my $commachunk (@comma_chunks)
{
@dot_chunks = split(/\./,$commachunk);
push(@last_dot_chunks, $dot_chunks[-1]); # last of the dotchunks
}
$new_first_line = join(',', @last_dot_chunks);
print "$new_first_line\n";
}
else
{
print $line;
}
}
答案 3 :(得分:0)
#!/usr/bin/env perl
use Tie::File;
tie my @a, 'Tie::File', $ARGV[0] or die "$ARGV[0]:$!";
$a[0] = join ",", map { (split /\./)[3] } split ',', $a[0];
使用您的文件名作为第一个参数调用该脚本。如果您坚持使用shell脚本执行此操作,那么最简单的方法就是:
#!/bin/sh
perl -e '
use Tie::File;
tie my @a, "Tie::File", $ARGV[0] or die "$ARGV[0]:$!";
$a[0] = join ",", map { (split /\./)[3] } split ",", $a[0];
' input-file
虽然你应该用input-file
替换$1
并将文件名作为第一个参数传递。 Tie::File
是一个很好的小模块,它将绑定的文件映射到数组,因此您可以简单地操作数组的元素并在文件中进行更改。在这种情况下,我们只是将您的输入文件绑定到数组@a
,然后按照您的描述拆分第一个字段。