【发布时间】:2014-08-30 15:53:28
【问题描述】:
我有一个如下所示的文本文件:
输入文件
1|abc
2|def
3|ghi
n|etc...
我需要在管道分隔符上将其拆分为两个文件。所以这是预期的输出:
文件_1:
1
2
3
n
文件_2:
abc
def
ghi
etc
我不知道输入文件会有多少行。您如何在 ksh 或 bash 中实现这一点?
谢谢。
【问题讨论】:
我有一个如下所示的文本文件:
输入文件
1|abc
2|def
3|ghi
n|etc...
我需要在管道分隔符上将其拆分为两个文件。所以这是预期的输出:
文件_1:
1
2
3
n
文件_2:
abc
def
ghi
etc
我不知道输入文件会有多少行。您如何在 ksh 或 bash 中实现这一点?
谢谢。
【问题讨论】:
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
【讨论】:
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
【讨论】:
这是使用其他 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
【讨论】: