我有一个看起来像这样的文本文件:
INPUT_FILE
1|abc
2|def
3|ghi
n|etc...
我需要将其拆分为管道分隔符上的两个文件。所以这是预期的输出:
File_1:
1
2
3
n
File_2:
abc
def
ghi
etc
我不知道输入文件会有多少行。你如何用ksh或bash实现这个目标?
谢谢。
答案 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