我的数据格式如下:
1234 2 3457 2 23454 12 98769 1 123 20
我试图以下面的格式获取数据:
1234 2
3457 2
23454 12
98769 1
123 20
我尝试使用:
sed -E -e 's/[[:blank:]]+/\n /2' test.txt
但这不起作用。
答案 0 :(得分:6)
$ printf '%d %d\n' 1234 2 3457 2 23454 12 98769 1 123 20
$ echo "1234 2 3457 2 23454 12 98769 1 123 20" |
sed -E 's/([0-9]+\s[0-9]+)\s/\1\n/g'
$ echo '1234 2 3457 2 23454 12 98769 1 123 20' |
grep -oE '[0-9]+\s[0-9]+'
$ echo "1234 2 3457 2 23454 12 98769 1 123 20" |
tr -s '[:blank:]' '\n' |
paste -d" " - -
$ echo '1234 2 3457 2 23454 12 98769 1 123 20' |
perl -lne 'print for /(\d+\s+\d+)+/g'
1234 2
3457 2
23454 12
98769 1
123 20
如果您有bash标记,我们可以使用 bashism 删除一个管道|
:
command <<< 'foo bar base'
这是 here-string 。与此处的文档类似:
<<<
之后的单词和换行符将传递给命令的标准输入。语法:command <<< "some sentence"
(与echo "some sentence" | command
类似,但没有子shell的开销)
$ time printf '%d %d\n' 1234 2 3457 2 23454 12 98769 1 123 20
real 0m0,000s
user 0m0,000s
sys 0m0,000s
答案 1 :(得分:3)
allMarks
解决方案:
Awk
awk '{ for(i=1; i<=NF; i+=2) print $i, $(i+1) }' test.txt
- 增量步骤(每次迭代处理2个项目)输出:
i+=2
答案 2 :(得分:2)
以下1234 2
3457 2
23454 12
98769 1
123 20
解决方案可能会对您有所帮助。
xargs
输出如下。
xargs -n2 < Input_file
答案 3 :(得分:2)
这可能适合你(GNU sed):
sed 's/\s/\n/2;P;D' file
用换行符替换第二个空格。打印到包含换行符,然后删除打印的内容。重复直到模式空间为空,然后用下一行补充模式空间并重复。