我有以下格式的数据:
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
但是这并没有起作用。
$ 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'
<<<
后面的单词和换行符会被传递给一个命令的标准输入。语法: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
sed -r 's/[0-9]+\s[0-9]+ /&\n/g' <<< "bla"
。 - fedorquitr -s '[:blank:]' '\n' <<<"$ data" | paste -d" " - -
- glenn jackmangrep
→ grep -oE '[0-9]+\s[0-9]+'
。也就是说,只打印出 "数字 空格 数字" 的匹配项。 - fedorquiAwk
解决方案:
awk '{ for(i=1; i<=NF; i+=2) print $i, $(i+1) }' test.txt
i+=2
- 增量步长(每次迭代处理两个项目)输出结果:
1234 2
3457 2
23454 12
98769 1
123 20
xargs
解决方案可能会对您有所帮助。xargs -n2 < Input_file
1234 2
3457 2
23454 12
98769 1
123 20
sed 's/\s/\n/2;P;D' file