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

时间:2019-08-19 07:19:06

标签: bash shell

我对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

1 个答案:

答案 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?