1

具有用不同字符串重复的值,希望它们在每第二列之后出现在新行上。

数据:

10.1.1.192 wef.xml 10.1.1.156 fwe.xml 10.1.1.159 few.xml 10.1.1.159 vz.xml 10.1.1.159 vsd.xml 10.1.1.209 vsd.xml 10.1.1.216 vsd.xml 10.1.1.195 vsd.xml 10.1.1.195 vsd.xml 10.1.1.194 vsvds.xml 10.1.1.192 vsdh.xml 10.1.1.198 here.xml 10.1.1.200 herrrr.xml

输出完成哪一项:

10.1.1.192 wef.xml
10.1.1.156 fwe.xml
10.1.1.159 few.xml
10.1.1.159 vz.xml
10.1.1.209 vsd.xml
and etc...
4

3 回答 3

7
xargs -n2

测试:

kent$  xargs -n2 <<< "10.1.1.192 wef.xml 10.1.1.156 fwe.xml 10.1.1.159 few.xml 10.1.1.159 vz.xml 10.1.1.159 vsd.xml 10.1.1.209 vsd.xml 10.1.1.216 vsd.xml 10.1.1.195 vsd.xml 10.1.1.195 vsd.xml 10.1.1.194 vsvds.xml 10.1.1.192 vsdh.xml 10.1.1.198 here.xml 10.1.1.200 herrrr.xml"     
10.1.1.192 wef.xml
10.1.1.156 fwe.xml
10.1.1.159 few.xml
10.1.1.159 vz.xml
10.1.1.159 vsd.xml
10.1.1.209 vsd.xml
10.1.1.216 vsd.xml
10.1.1.195 vsd.xml
10.1.1.195 vsd.xml
10.1.1.194 vsvds.xml
10.1.1.192 vsdh.xml
10.1.1.198 here.xml
10.1.1.200 herrrr.xml
于 2013-07-25T10:11:56.993 回答
2

重击解决方案:

read -a ar < input
for ((i=0 ; i<${#ar[@]} ; i+=2)) ; do
    echo ${ar[i]} ${ar[i+1]}
done

它只是将整行读入一个数组,然后在循环中打印这些对。

sed解决方案:

sed -e 's/\([^ ]\+ [^ ]\+\) /\1\n/g' < input

如果在它之前还有一个空格,它会用换行符替换一个空格。

Perl 单行:

perl -ne 'print $_, ($ff = ! $ff) ? " " : "\n" for split' < input

它使用 $ff 作为触发器。

于 2013-07-25T10:10:15.077 回答
1
while read line; do 
    printf "%s %s\n" $line   # the variable is specifically unquoted here 
done <<END
10.1.1.192 wef.xml 10.1.1.156 fwe.xml 10.1.1.159 few.xml 10.1.1.159 vz.xml 10.1.1.159 vsd.xml 10.1.1.209 vsd.xml 10.1.1.216 vsd.xml 10.1.1.195 vsd.xml 10.1.1.195 vsd.xml 10.1.1.194 vsvds.xml 10.1.1.192 vsdh.xml 10.1.1.198 here.xml 10.1.1.200 herrrr.xml
END
10.1.1.192 wef.xml
10.1.1.156 fwe.xml
10.1.1.159 few.xml
...

另一种方法是将空格转换为换行符,然后将相应的行粘贴在一起:

tr " " "\n" <<< "$line" | paste - -
于 2013-07-25T10:25:50.123 回答