我对bash完全陌生,我有一个包含一些字符串记录的文件,比如说
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
我需要制作另一个看起来像这样的文件:
2 4 5 3 1
7 9 10 8 6
...
但是我明白了:
2 4 5
3 1
7 9 10
8 6
问题可能是由于以下事实造成的:在行的末尾没有定界符,并且在打印时需要输入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
答案 0 :(得分:5)
如果您的任务只是更改字段分隔符并重新排序字段,那么将整个文件读入内存的效率非常低。一次只处理一行。
awk -F, '{ print $2, $4, $5, $3, $1 }' file.txt >new.txt
Awk比裸机脚本更适合;也许也见Bash while read loop extremely slow compared to cat, why?