【问题标题】:parsing string with spaces in Awk在 Awk 中解析带空格的字符串
【发布时间】:2013-10-21 18:18:05
【问题描述】:

我有一个包含以下值的文件:

ID1 RID1 2 rid1 第 2 部分 ID1 RID2 1 rid2 第 1 部分 ID1 RID2 2 rid2 第 2 部分 ID2 RID3 1 rid3 第 1 部分 ID2 RID3 2 rid3 第 2 部分 ID2 RID4 1 rid4 第 1 部分

ID RID 偏移文本。 ID、RID、偏移量和文本是制表符分隔的。文本可以是多个单词,中间有空格。

我正在尝试根据 RID 和升序偏移连接它们。

基本上想要的输出是

ID2 RID3 rid3 part1rid3 part2 ID2 RID4 rid4 第 1 部分 ID1 RID1 rid1 part1rid1 part2 ID1 RID2 rid2 part1rid2 part2

我正在尝试使用 awk 执行此操作。这是我的 awk 1 班轮:

猫示例.txt| awk '{line="";行 = 行 $4; table[$1"\t"$2]=table[$1"\t"$2] line;} END {for (key in table) print key"\t"table[key];}'

由于某种原因,awk 无法解析 $4 中的所有单词,即它只是选择第一个单词并输出:

ID2 RID3 rid3rid3 ID2 RID4 rid4 ID1 RID1 rid1rid1 ID1 RID2 rid2rid2

如何解析 $4 中的所有单词,而不仅仅是第一个单词?

【问题讨论】:

  • 您是否尝试过awk -F "\t" 将字段分隔符设置为制表符,而不是默认的空格和制表符的任意组合?

标签: bash sed awk


【解决方案1】:

我建议类似:

awk -F " " '{key=$1" "$2; value=$4" "$5; if(! key in t){t[key]=value} else {t[key]=t[key]""value}} END {for (key in t){print key" "t[key]}}' file|sort -rt' ' -k1

问候, 伊德里斯

【讨论】:

    【解决方案2】:

    从您自己的脚本的这个更新版本开始:

    awk 'BEGIN{FS=OFS=SUBSEP="\t"} {table[$1,$2]=table[$1,$2] $4} END{for (key in table) print key, table[key]}' example.txt
    

    如果这不符合您的要求,请告诉我们,您需要帮助找出解决方法。

    【讨论】:

    • ID2 RID3 1 rid3 part1 这并不完全输出我需要的内容:这是它输出的内容 ID1 RID2 1 rid2 part1 ID2 RID4 1 rid4 part1 ID1 RID1 1 rid1 part1 ID2 RID3 2 rid3 part2 ID1 RID2 2 rid2 part2 ID1 RID1 2 rid1 part2
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2019-08-21
    相关资源
    最近更新 更多