Awk 用新行替换第二个空格

Awk 用新行替换第二个空格,awk,sed,printf,grep,tr,paste,perl,bash,Awk,Sed,Printf,Grep,Tr,Paste,Perl,Bash,我有以下格式的数据: 1234 2 3457 2 23454 12 98769 1 123 20 1234 2 3457 2 23454 12 98769 1 123 20 我正在尝试以以下格式获取数据: 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 但这不起作用。

我有以下格式的数据:

1234 2 3457 2 23454 12 98769 1 123 20
1234 2 
3457 2 
23454 12 
98769 1 
123 20 
我正在尝试以以下格式获取数据:

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

但这不起作用。

Awk
解决方案:

awk '{ for(i=1; i<=NF; i+=2) print $i, $(i+1) }' test.txt

下面的
xargs
解决方案可能会对您有所帮助

xargs -n2 < Input_file
只需使用shell内置: 或与或(归功于fedorqui): 或与和(归功于格伦·杰克曼): 或与: 输出: 注: 如果您有标签,我们可以使用bashism删除一个管道

这可能适用于您(GNU-sed):


用换行符替换第二个空格。打印到并包括换行符,然后删除打印的内容。重复,直到图案空间为空,然后用下一行填充图案空间并重复。

或sed→
sed-r's/[0-9]+\s[0-9]+/&\n/g'或
tr-s'[:blank:][''\n'谢谢,添加了两种解决方案并使用
grep
→ <代码>grep-oE'[0-9]+\s[0-9]+'
。也就是说,只打印“数字-空格-数字”的匹配项。问题是,您的方法不起作用,因为您只在第二个匹配项上替换了一次。
$ 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
command <<< 'foo bar base'
$ 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 's/\s/\n/2;P;D' file