从单列文件到多列文件

从单列文件到多列文件

我有一个这样的文件:

azg 
1234567890
asgz
1234367890
aztyu
1234377890
ast
1234367899
asgassfa
1134367890

我想要创建一个如下所示的输出:


did          dialer-label

1234567890   azg
1234367890   asgz
1234377890   aztyu
1234367899   ast
1134367890   asgassfa

好的,我得到了我想要的输出:

  printf '%s\t%s\t%s\t%s\n' "Dialer-Label" ,"DID" ,"PBX-Label" ,"Status"
  tac checklist.txt | paste - -  | tac | column -t
}

现在我想添加 1 个包含 .csv 文件中数据的列。在该 .csv 文件中,我有一个包含数字的列和许多包含该数字参数的列。我需要将我之前设置的 did 列中的数字与 csv 中的数字进行匹配,并得到一个包含该 .csv 中的参数的输出

此时我有:

Dialer-Label    ,DID    ,PBX-Label  ,Status
LABEL1        2223338112
LABEL2        2223335689
LABEL3        2223330299
LABEL4        2223335786
LABEL5        2223335734

我需要将“DID”列中的数字与此 csv 中的数字进行匹配,并且在“PBX-Label”列中,我需要从 csv 的 C 列中获取数据文件

答案1

您可以使用paste - -并利用来tac改变顺序。

{
  printf '%s\t%s\n\n' "did" "dialer-label"
  tac file | paste - -  | tac
}

可选择通过管道| column -et使其准确对齐。

输出:

did         dialer-label

1234567890  azg
1234367890  asgz
1234377890  aztyu
1234367899  ast
1134367890  asgassfa

答案2

您可以使用 awk,如下所示:

  • 在开始时,打印一个标题
  • 对于奇数行,存储标签
  • 否则打印行和标签

前任。

awk '
  BEGIN {printf "%-12s%s\n\n", "did", "dialer-label"} 
  NR%2 {label = $0; next} 
  {printf "%-12d%s\n", $0, label}
' file
did         dialer-label

1234567890  azg
1234367890  asgz
1234377890  aztyu
1234367899  ast
1134367890  asgassfa

如果您不关心对齐(或者不介意column之后通过管道传输),那么使用 sed:

printf '%s\n' dialer-label did | sed -n -e 1G -e 'h;n;G;s/\n/\t/;p' - file
did     dialer-label

1234567890      azg
1234367890      asgz
1234377890      aztyu
1234367899      ast
1134367890      asgassfa

相关内容