【问题标题】:get column list using sed/awk/perl使用 sed/awk/perl 获取列列表
【发布时间】:2019-09-11 12:33:30
【问题描述】:

我有不同的文件,如下格式

场景 1:

File1
no,name
1,aaa
20,bbb

File2
no,name,address
5,aaa,ghi
7,ccc,mn

我想获取列数更多且顺序相同的列列表

**Expected output for scenario 1 :**
no,name,address

场景 2:

File1
no,name
1,aaa
20,bbb

File2
no,age,name,address
5,2,aaa,ghi
7,3,ccc,mn

预期结果:

Both file headers and positions are different as a message

我对使用 bash / perl / sed / awk 的任何简短解决方案感兴趣。

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: perl awk sed


【解决方案1】:

Perl 解决方案:

perl -lne 'push @lines, $_;
           close ARGV;
           next if @lines < 2;
           @lines = sort { length $a <=> length $b } @lines;
           if (0 == index "$lines[1],", $lines[0]) {
               print $lines[1];
           } else {
               print "Both file headers and positions are different";
           }' -- File1 File2
  • -n逐行读取输入并运行每一行的代码
  • -l 从输入中删除换行符并将它们添加到打印行中
  • closing 特殊文件句柄 ARGV 使 Perl 打开下一个文件并从中读取,而不是处理当前打开的文件的其余部分。
  • next 使 Perl 回到代码的开头,一旦读取了多个输入行,它就可以继续。
  • sort 按长度对行进行排序,以便我们知道较长的行在数组的第二个元素中。
  • index 用于检查较短的标头是否是较长标头的前缀(包括第一个标头后的逗号,例如no,names 被正确拒绝)

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2021-05-24
    • 2017-08-25
    • 2013-02-27
    相关资源
    最近更新 更多