<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[[实践Ok]Linux下用awk拼接Post字符串、实现一列变成一行的方法也就是列变行及awk 多列变多行的转换， sed和awk实现打印奇数行和偶数行。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Mon, 04 Nov 2013 02:19:51 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：有时用wireshark抓到的post数据时，需要把一列并成一行形成CUrl格式的数据进行模拟Post请求，用awk快速实现一列变一行。<br/>一、一列变成一行的AWK实现方法：<br/>请教！怎么把一个文本的一列，换成一行？<br/>在vi中能做吗？<br/>sed可以做到<br/>是吗？请教sed怎么实现呢？谢谢！<br/>也就是一个文件是这样的：<br/>oplasttr<br/>dsprjord<br/>accontsup106<br/>alprjinfo<br/>holiday<br/>把它替换成oplasttr dsprjord accontsup106 alprjinfo holiday<br/>cat test.txt &#124; awk &#039;&#123;printf &quot;%s &quot;,$0&#125;&#039;<br/>AWK可以取出任何一列并形成行：<br/>例子:&nbsp;&nbsp;<br/>[root@WANGJIAN ~]# cat file&nbsp;&nbsp;<br/>a 13&nbsp;&nbsp;<br/>b 1&nbsp;&nbsp;<br/>c 23&nbsp;&nbsp;<br/>d 234&nbsp;&nbsp;<br/>[root@WANGJIAN ~]# awk &#039;&#123;printf &quot;%s&quot;, $1&#125;&#039; file&nbsp;&nbsp;<br/>abcd&nbsp;&nbsp;<br/><br/>把a、b、c、d与相应的值放到file里，然后通过awk语句实现列变行的转换。<br/><br/>实践如下：<br/>[root@test tmp]# vi test<br/>You have new mail in /var/spool/mail/root<br/>[root@test tmp]# cat test &#124; awk &#039;&#123;printf &quot;%s &quot;,$0&#125;&#039;&nbsp;&nbsp;&nbsp;&nbsp;<br/>oplasttr dsprjord accontsup106 alprjinfo holiday <br/><br/>[root@test tmp]# cat test &#124; awk &#039;&#123;printf &quot;%s &quot;,$1&#125;&#039;<br/>oplasttr dsprjord accontsup106 alprjinfo holiday<br/><br/>而用wireshark导出的Post或Get参数时是以如下形式进行分布的：<br/>Content-Disposition: form-data; name=&quot;playlist&quot;<br/>20362<br/>------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6<br/>Content-Disposition: form-data; name=&quot;user_name&quot;<br/>20120926173632167912<br/>------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6<br/>Content-Disposition: form-data; name=&quot;email&quot;<br/>21240168<br/>------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6<br/>用editplus处理下就形成下面的格式了：<br/>1）Content-Disposition: form-data; name=&quot; 全部替换掉。<br/>2）&quot;$ 用正则把后面的&quot;给去掉。<br/>3）------------GI3GI3gL6GI3ae0gL6Ef1ei4gL6gL6 替换掉。<br/>4）用^[&#92;t ]*&#92;n&nbsp;&nbsp;正则把空行去掉。<br/>形成下面的结构，再用awk处理一下就形成了post的格式（数据多时这样做最省力，少了就自己拼吧）：<br/>playlist<br/>20362<br/>user_name<br/>20120926173632167912<br/>email<br/>21240168<br/>如下处理：<br/><textarea name="code" class="C" rows="15" cols="100">
 awk &#039;&#123;if(NR%2==0)&#123;printf(&quot;%s&amp;&quot;, $1)&#125;else&#123;printf(&quot;%s=&quot;, $1)&#125;&#125;&#039; postdatafromwireshark.txt
</textarea><br/>自己的实践下要多行，问了下scottjiang兄弟一行搞定：<br/><textarea name="code" class="C" rows="15" cols="100">
[root@test tmp]# cat test
name
xiangdong
age
29
province
beijing
nativeplace
chongqing
[root@test tmp]# awk &#039;&#123;if(NR%2==0)&#123;printf(&quot;%s&amp;&quot;, $1)&#125;else&#123;printf(&quot;%s=&quot;, $1)&#125;&#125;&#039; test
name=xiangdong&amp;age=29&amp;province=beijing&amp;nativeplace=chongqing&amp;
</textarea><br/>来自：http://linux.sheup.com/linux/linux5480.htm<br/><br/>二、sed和awk实现打印奇数行和偶数行<br/>假设文件为test.txt<br/>1.奇数行：<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk实现：awk &#039;&#123;if (NR%2==1) print $0&#125;&#039;&nbsp;&nbsp;test.txt<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed实现：sed -n &#039;p;n&#039; test.txt<br/>2.偶数行：<br/>&nbsp;&nbsp;&nbsp;&nbsp;awk实现：awk &#039;&#123;if (NR%2==0) print $0&#125;&#039;&nbsp;&nbsp;test.txt<br/>&nbsp;&nbsp;&nbsp;&nbsp;sed实现：sed -n &#039;n;p&#039; test.txt<br/>来自：http://blog.chinaunix.net/uid-7845870-id-3203124.html<br/><br/><br/>三、awk 多列变多行的转换：<br/>tony@tony-LIFEBOOK-LH532:~$ cat test<br/>1 2 3 4 5<br/>1 2 3 4 5<br/>1 2 3 4 5<br/>1 2 3 4 5<br/>1 2 3 4 5<br/>1 2 3 4 5<br/><br/>怎么变成<br/>1 1 1 1 1 1<br/>2 2 2 2 2 2<br/>3 3 3 3 3 3<br/>4 4 4 4 4 4<br/>5 5 5 5 5 5<br/>——————————————————————<br/>AWK：<br/><textarea name="code" class="php" rows="15" cols="100">
&nbsp;&nbsp;&nbsp;&nbsp;awk &#039;&#123;for(i=1;i&lt;=NF;i++)a[i]=a[i]?a[i]&quot; &quot;$i:$i&#125;END&#123;for(i=1;i&lt;=NF;i++)print a[i]&#125;&#039;
</textarea><br/>实践如下：<br/>[root@test tmp]# vi test<br/>[root@test tmp]# cat test&#124;awk &#039;&#123;for(i=1;i&lt;=NF;i++)a[i]=a[i]?a[i]&quot; &quot;$i:$i&#125;END&#123;for(i=1;i&lt;=NF;i++)print a[i]&#125;&#039;<br/>1 1 1 1 1 1<br/>2 2 2 2 2 2<br/>3 3 3 3 3 3<br/>4 4 4 4 4 4<br/>5 5 5 5 5 5<br/>来自：http://bbs.chinaunix.net/forum.php?mod=viewthread&amp;tid=4078467
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [实践Ok]Linux下用awk拼接Post字符串、实现一列变成一行的方法也就是列变行及awk 多列变多行的转换， sed和awk实现打印奇数行和偶数行。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>