我有逗号分隔的txt文件,该文件必须只有五列,但有些行的列数超过5列。
我想将第6个到第10个移动到换行符,将第11个到第15个移到换行符上等等
以下是input.txt
1,2,3,4,5
12,13,14,15,16,11,17,18,19,20
22,23,24,25,26,22,27,28,29,21,30,31,32,33,34
以下是Output.txt
1,2,3,4,5
12,13,14,15,16
11,17,18,19,20
22,23,24,25,26
22,27,28,29,21
30,31,32,33,34
我正在尝试使用awk完成此操作,但没有运气。我想要输出如上所述。
答案 0 :(得分:1)
这个怎么样?
sed 's/,/ /g' file|xargs -n5 |sed 's/ /,/g'
1,2,3,4,5
12,13,14,15,16
11,17,18,19,20
22,23,24,25,26
22,27,28,29,21
30,31,32,33,34
1)sed命令:sed 's/,/ /g'
和sed 's/ /,/g'
用于替换字符。
2)xargs -n5:
-n max-args, --max-args=max-args
Use at most max-args arguments per command line. Fewer than max-args arguments will be
used if the size (see the -s option) is exceeded, unless the -x option is given, in
which case xargs will exit.
答案 1 :(得分:1)
您可以使用grep
:
grep -oP '([^,]+,){4}[^,]+' inputfile
或
grep -oE '([^,]+,){4}[^,]+' inputfile
或
egrep -o '([^,]+,){4}[^,]+' inputfile
为了您的输入,它会产生:
1,2,3,4,5
12,13,14,15,16
11,17,18,19,20
22,23,24,25,26
22,27,28,29,21
30,31,32,33,34
答案 2 :(得分:1)
使用awk
awk -F, '{for (i=1;i<=NF;i++) printf "%s"(i%5==0?RS:FS),$i}' file
1,2,3,4,5
12,13,14,15,16
11,17,18,19,20
22,23,24,25,26
22,27,28,29,21
30,31,32,33,34
答案 3 :(得分:0)
假设您总共有5个元素的模数,并且您想要完全填充每一行,您还可以使用tr
和paste
,如下所示:
<file tr , \\n | paste -d, - - - - -
输出:
1,2,3,4,5
12,13,14,15,16
11,17,18,19,20
22,23,24,25,26
22,27,28,29,21
30,31,32,33,34