2017-02-22 12 views
1

Я пробовал различные комбинации следующий: (. Ех foo bar ||| baz)Как разбить текстовый файл по строкам на 2 текстовых файла по разделительному столбцу?

awk -F" ||| " '{$0=$1}1' source_file.txt > column1.txt 
awk -F" ||| " '{$0=$1}2' source_file.txt > column2.txt 

или

awk 'BEGIN {FS=" ||| ";}{print $1}' source_file.txt > column1.txt 
awk 'BEGIN {FS=" ||| ";}{print $2}' source_file.txt > column2.txt 

Вместо желаемого выхода, я либо получить всю строку или я получаю только первый слово (например, foo).

Если вы хотите помочь, вот пример текстового файла:

source_file.txt

foo bar ||| baz 
qux ||| quux 
corge grault ||| garply waldo 
fred ||| 
xyzzy ||| thud 

А вот желаемый результат:

column1. txt

foo bar 
qux 
corge grault 
fred 
xyzzy 

column2.txt

bar 
quux 
garply waldo 

thud 

ответ

4
awk -F' \\|\\|\\| ?' '{print $1 > "column1"; print $2 > "column2"}' file 

или вообще

awk -F' \\|\\|\\| ?' '{for(i=1;i<=NF;i++) print $i > "column"i}' file 
+0

Спасибо. Вы также получаете эту ошибку? 'awk: синтаксическая ошибка в исходной строке 1 context is \t {for (i = 1; i <= NF; i ++) print $ i> >>>" column "i <<<} awk: незаконный оператор в источнике строка 1' – Ryan

+1

В моем случае нет ошибок, убедитесь, что вы используете одиночные кавычки для скрипта. – karakfa

0

Вы можете попробовать

cat /tmp/a | tr -s '|' | cut -d'|' -f1 #for part 1 

cat /tmp/a | tr -s '|' | cut -d'|' -f2 | sed -E "s/^[[:space:]]+//g" #for part 2 

Флаг tr выжимает разделители вместе.

Смежные вопросы