2011-10-30 57 views
0

文件格式我是新来这些AWK和贝壳的东西,结果被套牢了简单而合乎逻辑的问题..一个简单而合乎逻辑的问题用AWK

输入文件:

6000 9876 5675 .... 
8576 8765 9845 ... 
.... 

输出文件:(必填)

60 00 98 76 56 75 .... 
85 76 87 65 98 45 ... 
.... 

转换输出到输入的是一个相当容易的任务

awk '{printf("%s%s %s%s %s%s %s%s", $1, $2, $3, $4, $5, $6, $7, $8)}' output_file 
                  > input_file 

但转换输入到输出,我没有得到任何的猜测

(也没有。的领域是不知道的,虽然我认为一些逻辑与NF可以解决这个问题),但主要问题是即使我不知道。 fileds然后如何继续?

最小。要阅读的单位将像$1,$2等。我需要打破他们,需要在他们之间插入一个空间。

我不知道很多关于regex,但我想对it.May的手有些操作与sedregex可以帮助我。

请提供您的宝贵suggestons.`

+0

对不起,我的'是拼写错误的标题.Thanx formatting'为编辑... –

回答

1
tr -d ' ' < inputFile | sed 's/../& /g' 

或者避免第一TR:

sed -e 's/ //g' -e 's/../& /g' 
+0

你能解释一下'&'是做exactly.As我刚才提到什么因为好奇心,我对这些事情很陌生。 –

+0

'&'表示这里要替换的两个字符,即sed命令告诉用自己后面的空格字符替换两个字符的每个序列。第一个tr命令从初始文件中删除任何空间以简化sed处理。 – jlliagre

+0

thanx我知道了.... –

2

这里有一个SED例子:因为这个问题标题中提到

$ echo "1234 5678 9012"|sed -e 's/\([0-9][0-9]\)\([0-9][0-9]\)/\1 \2/g' 
12 34 56 78 90 12 
+0

正如您已经知道输入只包含数字和空格,可能是'<<<“1234 5678 9012“sed -r's /(..)(..)(\ s)?/ \ 1 \ 2 \ 3/g''可能就足够了。 – potong

0

“ awk“,我给了一个awk解决方案,虽然已经接受了答案:

这需要GAWK:

kent$ echo "6000 9876 5675 
8576 8765 9845"|awk '{for(i=1;i<=NF;i++)$i=gensub(/^([0-9]{2})([0-9]{2})$/,"\\1 \\2","g",$i);print }'          
60 00 98 76 56 75 
85 76 87 65 98 45