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