在Awk中解析带空格的字符串

时间:2013-10-21 18:18:06

标签: bash sed awk

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

 ID1 RID1 2 rid1 part2
 ID1 RID2 1 rid2 part1
 ID1 RID2 2 rid2 part2
 ID2 RID3 1 rid3 part1
 ID2 RID3 2 rid3 part2
 ID2 RID4 1 rid4 part1

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

我试图根据RID和递增偏移来连接它们。

基本上所需的输出是

ID2     RID3    rid3 part1rid3 part2
ID2     RID4    rid4 part1
ID1     RID1    rid1 part1rid1 part2
ID1     RID2    rid2 part1rid2 part2

我想用awk做这个。这是我的awk 1班轮:

cat example.txt| awk '{line=""; line = 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中的所有单词而不仅仅是第一个单词?

2 个答案:

答案 0 :(得分: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

此致 伊德里斯

答案 1 :(得分:0)

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

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

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