用于映射列的awk命令&连接列

用于映射列的awk命令&连接列,awk,Awk,cat file.txt 一,;2|56;二, 1 | 67 1 | 56 二,;1.1.1|56;56;56;56 我有以上作为输入&我想把它显示为,直到管道和连接将是一样的 管道左侧的第一根立柱将与管道右侧的第一根立柱连接, 因此,预期的产出将是 1-56 2-2 这是第一排的。对于所有行,它应该以相同的方式发生。 非常感谢您的帮助。祝您救援成功 awk -F\| '{n=split($1,a,";"); m=split($2,b,";"); m

cat file.txt

一,;2|56;二,

1 | 67

1 | 56

二,;1.1.1|56;56;56;56

我有以上作为输入&我想把它显示为,直到管道和连接将是一样的 管道左侧的第一根立柱将与管道右侧的第一根立柱连接, 因此,预期的产出将是

1-56

2-2

这是第一排的。对于所有行,它应该以相同的方式发生。 非常感谢您的帮助。

祝您救援成功

awk -F\| '{n=split($1,a,";");
           m=split($2,b,";"); 
           min=n<m?n:m; 
           for(i=1;i<=min;i++) print a[i]"-"b[i]}' file

1-56
2-2
1-67
1-56
2-56
1-56
1-56
1-56
也许您想在输出行之间放置一个分隔符以指示记录…

尝试:

awk -F'[;|]' '{for(i=1; i<=NF/2; i++) print $i "-" $(i+NF/2)}'  file

1-56
2-2
1-67
1-56
2-56
1-56
1-56
1-56
说明: 此方法考虑了管道符号始终位于中间的情况:

awk -F'[;|]' '               # Use the semicolon and the pipe symbol as field separator
  {
    for(i=1; i<=NF/2; i++)   # For every field on the left hand side of the pipe symbol
      print $i "-" $(i+NF/2) # Print each field on the left hand side (LHS) of the 
  }                          # pipe symbol together with its RHS counterpart 
'  file

非常感谢。你能解释一下这个命令是怎么写的吗