从定界符上的文件中剪切字符串

beg*_*r17 0 bash shell

我是bash的新手,我有一个包含一些字符串记录的文件,比方说

1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
Run Code Online (Sandbox Code Playgroud)

我需要制作另一个如下所示的文件:

2 4 5 3 1
7 9 10 8 6
...
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

2 4 5
3 1
7 9 10
8 6
Run Code Online (Sandbox Code Playgroud)

该问题可能是由于以下事实造成的:在行的末尾没有定界符,并且在打印时需要输入Enter,但是我不知道该如何解决。

#!/bin/bash

FILE=file.txt
a=$(cut -d',' -f2 $FILE)
b=$(cut -d',' -f4 $FILE)
c=$(cut -d',' -f5 $FILE)
d=$(cut -d',' -f3 $FILE)
e=$(cut -d',' -f1 $FILE)


paste <(echo "$a") <(echo "$b") <(echo "$c") <(echo "$d") <(echo "$e") --delimiters ' '> new.txt
Run Code Online (Sandbox Code Playgroud)

tri*_*eee 5

如果您的任务只是更改字段分隔符并重新排列字段,那么将整个文件读入内存的效率非常低。一次只处理一行。

awk -F, '{ print $2, $4, $5, $3, $1 }' file.txt >new.txt
Run Code Online (Sandbox Code Playgroud)

Awk比裸机脚本更适合;也许与cat相比,Bash在读取循环时也非常慢,为什么呢?