如何将分隔符上的文本文件拆分为unix中的多个文件?

时间:2014-08-30 15:53:29

标签: bash unix text split ksh

我有一个看起来像这样的文本文件:

INPUT_FILE

1|abc
2|def
3|ghi
n|etc...

我需要将其拆分为管道分隔符上的两个文件。所以这是预期的输出:

File_1:

1
2
3
n

File_2:

abc
def
ghi
etc

我不知道输入文件会有多少行。你如何用ksh或bash实现这个目标?

谢谢。

3 个答案:

答案 0 :(得分:2)

awk适合这项任务:

awk -F\| '{print $1 > "File_1"; print $2 > "File_2"}' input_file

这会将您的文字拆分为“|”并将每列打印到相应的文件。

如果有两个以上的字段,您可能更喜欢使用循环:

awk -F\| '{for(i=1;i<=NF;++i) print $i > "File_" i}' input_file

答案 1 :(得分:1)

cut -d '|' -f 1 input_file > File_1
cut -d '|' -f 2 input_file > File_2

仅限bash:

while IFS='|' read A B; do echo "$A" >>File_1; echo "$B" >>File_2; done <input_file

答案 2 :(得分:0)

这是使用其他bash命令的另一种解决方案

cat input_file | cut -d '|' -f1 > File_1
cat input_file | cut -d '|' -f2 > File_2

或者你可以把它们放在一行

cat input_file | tee >(cut -d '|' -f1 > File_1) | cut -d '|' -f2 > File_2