2017-08-08 49 views
-1

我有这样一个文件:
id1 A B C T G A B C id2 G V L P A J M TUnix:如何分组每两列?

,我想有:
id1 AB CT GA BC id2 GV LP AJ MT

什么建议吗?

+0

我投票,因为它似乎是一个工具或解决方案的建议的请求,关闭了这个问题,而比请求您的代码提供帮助。这使您的问题脱离了StackOverflow。如果该评估不正确,并且确实需要编写自己的代码,请[将您的工作添加到您的问题中](https://stackoverflow.com/posts/45577119/edit),然后我将收回我的近距离投票。 – ghoti

+0

获取Arnold Robbins编写的Effective Awk Programming第4版 - 它会教你如何使用awk来做你想做的事。 –

回答

3

简单的sed方法:

sed 's/\([A-Z]\) \([A-Z]\)/\1\2/g' file 

或者AWK替代:

awk '{ r=$1; for(i=2;i<=NF;i+=2) r=r FS $i$(i+1); print r }' file 

输出(两种方法):

id1 AB CT GA BC 
id2 GV LP AJ MT 
+0

谢谢!它完美的作品 –

+0

@GersonOliveiraJunior,不客气! – RomanPerekhrest

1
perl -np -e 's/ ([A-Z]) ([A-Z])/ $1$2/g' <FILENAME 

与输入文件的名称替换文件名。

+0

当我考虑它时,示例中的大写字母可能是占位符,任何东西都是空格分隔的。如果是这样,请将“[A-Z]”替换为“[^ \ t]”(除空格或制表符外的任何内容)。使用\ s,\ w,\ d等是有问题的。 “空格”,“单词字符”,“数字”的概念是由语言环境决定的。 –

2

另一sed

$ sed -r 's/\s(\w+)\s(\w+)/ \1\2/g' file 

id1 AB CT GA BC 
id2 GV LP AJ MT 

工作,即使你的id字段具有相同的字符集。

1
awk '{for(i=1;i<=NF;i++){printf (i%2)?$i" ":$i}printf RS}' file 

如果该字段的数量为奇数,打印$i" ",否则打印$i