例如,单行文件line.txt
具有以下行:
741 12 3 24 45 123 32 111 34
假设指定每个单词的数量是3
。那么目标是:
741 12 3
24 45 123
32 111 34
在这种情况下,哪些脚本可以提供帮助,一个简单的脚本将不胜感激。
这对 awk 来说是一件容易的事。我也看到了这个问题vim
,然后用 vim 尝试了一下。
假设光标位于行首。您可以尝试输入(在NORMAL
模式下):
100@='3f r^M'
然后键入Enter
。
宏也可以录制qn3f r<Enter>q
,然后你就100@n
笔记
^M
你需要输入<C-V><Enter>
cat your_file | tr " " "\n" | paste -s -d " \n"
试试这个
printf "%s %s %s\n" $(cat line.txt)
它产生
741 12 3
24 45 123
32 111 34
这是使用 sed 的一种方法。将字数固定为3
,您可以执行以下操作:
sed 's/\( [^ ]* [^ ]*\) /\1\n/g' <filename>
如果要动态指定字数,可以使用以下脚本动态创建正则表达式:
#!/bin/sh
test $# -eq 2 || (echo "Usage: $(basename "${0}") <filename> <#words>" && exit 1)
for i in $(seq 2 "${2}"); do
REGEX=" [^ ]*${REGEX}"
done
cat "${1}" | sed "s/\\(${REGEX}\\) /\\1\n/g"
一种使用方式awk
:
awk '{
for ( i = 1; i <= NF; i++ ) {
printf "%s%s", $i, (i % 3 == 0) ? "\n" : " "
}
}' line.txt
它产生:
741 12 3
24 45 123
32 111 34
编辑以修复多个字段的脚本(参见注释),而不是 3 的倍数:
awk '
{
for ( i = 1; i <= NF; i++ ) {
printf "%s%s", $i, (i < NF && i % 3 == 0) ? "\n" : " "
}
}
END { printf "\n" }
' infile