【问题标题】:concatenation of two lines using awk使用 awk 连接两行
【发布时间】:2015-06-11 04:09:08
【问题描述】:

我有一个文件,每行有 74 列。如果第一列和第二列匹配,我一直在尝试合并这些行。 该文件如下所示。

CHECK_IN|2000000000|MS|XXXX|XXXX|N|34|N|N|N|N|N|Y|N|N|N|N|N|123456|aaaaaa|122333|||||||||||AAAAAA|BBBBBBB|CCCCCCC|||||||||||||||||||1000123|aaaa|N|qwerty||REGISTERED|REGISTERED|REGISTERED|UNREGISTERED|19-05-2015|Video|EDM||||||||||xxxxx
CHECK_IN|2000000000|MS|XXXX|XXXX|N|34|N|Y|N|N|N|N|N|N|N|N|N|345676|Abcgdwejj|aaaaaaa||||||||||||||||||||||||NNNNNNN||||||||1000001|cccccc|N|qyuirt||REGISTERED|REGISTERED|REGISTERED|UNREGISTERED|19-05-2015|Video|EDM||||||||||xxxxx

我使用了以下脚本:

cat sample_file4.txt | awk -F "|" '{line="";
for(i = 3; i <= NF ;i++)
line = line $i"|";
table[$1"|"$2]=table[$1"|"$2]"|"line;}
END { for (key in table) print key "==>" table[key];}' > output9.txt

记录没有附加到第一行。除了键值,同一行被重复。如下所示

1.CHECK_IN|2000000000==>|MS|XXXX|XXXX|N|34|N|N|N|N|N|Y|N|N|N|N|N|123456|aaaaaa|122333|||||||||||AAAAAA|BBBBBBB|CCCCCCC|||||||||||||||||||1000123|aaaa|N|qwerty||REGISTERED|REGISTERED|REGISTERED|UNREGISTERED|19-05-2015|Video|EDM||||||||||xxxxx
2.||MS|XXXX|XXXX|N|34|N|Y|N|N|N|N|N|N|N|N|N|345676|Abcgdwejj|aaaaaaa||||||||||||||||||||||||NNNNNNN||||||||1000001|cccccc|N|qyuirt||REGISTERED|REGISTERED|REGISTERED|UNREGISTERED|19-05-2015|Video|EDM||||||||||xxxxx

请帮我把它们放到单行上。

【问题讨论】:

  • 它在单行中出现。看看这个:ideone.com/mfTOZ5
  • combine these lines 不明确 - 显示该输入的预期输出。

标签: bash unix awk


【解决方案1】:

我会这样写:

awk '
    BEGIN {FS = OFS = "|"}
    { key = $1 SUBSEP $2 }
    !(key in lines) {lines[key]=$0; next}
    {$1=$2=""; line=$0; sub(/^../, "", line); lines[key] = lines[key] FS line}
    END {for (key in lines) {print lines[key]}}
' file

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 2012-10-26
    • 2020-12-30
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2019-01-12
    相关资源
    最近更新 更多