2014-08-30 1 views
0

У меня есть текстовый файл, который выглядит следующим образом:Как разбить текстовый файл на разделитель на несколько файлов в unix?

входной_файл

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

Мне нужно разделить это на два файла на вертикальной чертой. Таким образом, это ожидаемый результат:

file_1:

1 
2 
3 
n 

file_2:

abc 
def 
ghi 
etc 

Я не знаю, сколько строк входного файла будет иметь. Как вы достигаете этого в ksh или bash?

спасибо.

ответ

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 
+0

Это работает. Спасибо! – user3590335

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

Только с Баш:

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

Вот еще одно решение, используя другие команды Баш

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 
Смежные вопросы